蓝懿ios技术交流和心得分享 16.1.28

控制器

  • 概念:凡是继承自UIViewController的对象,都叫做控制器
  • 注意:每一个控制器都会专门管理一个软件界面
  • 作用:负责处理软件界面的各种事件、负责软件界面的创建和销毁

IBAction

  • 只能修饰方法的返回值类型
  • 被IBAction修饰的方法
    • 能拖线到storyboard中
  • 返回值类型实际是void
  • 使用格式
-

(IBAction)buttonClick{}

IBOutlet

  • 通过IBOutlet修饰的成员属性虽然外部是weak修饰的,但IBOutlet内部隐藏一个强指针
  • 在对象被销毁时,并不会立马被清空,只有当发现没有别的指针只用该成员属性时IBoutlet内部隐藏的强指针才会释放,对象才会被销毁

  • 只能修饰属性

  • 被IBOutlet修饰的属性

  • 能拖线到storyboard中
  • 使用格式

@property

(nonatomic, weak) IBOutlet UILabel *label;

关于IBAction、IBOutlet前缀IB的解释

  • 全称:Interface Builder
  • 以前的UI界面开发模式:Xcode3 + Interface Builder
  • 从Xcode4开始,Interface Builder已经整合到Xcode中了

类扩展(Class Extension)

  • 作用
    • 能为某个类增加额外的属性、成员变量、方法声明
  • 一般将类扩展写到.m文件中
  • 一般将一些私有的属性写到类扩展
  • 使用格式
@interface

类名()/* 属性、成员变量、方法声明 */@end

  • 与分类的区别

  • 分类的小括号必须有名字 ```objc @interface 类名(分类名字) /* 方法声明 */ @end

@implementation 类名(分类名字)/* 方法实现 */@end```- 分类只能扩充方法- 如果在分类中声明了一个属性,分类只会生成这个属性的get\set方法声明

tag

1.使用tag根据父控件能取出当前内部子控件2.使用tag能判断点击的哪个按钮

-

(UIView *)viewWithTag:(NSInteger)tag;

addSubview:

任何控件都能往自身内部添加子控件subViews

:子控件

superView

:父控件

frame / bounds / center

  • frame:
    • 1.能设置尺寸
  • 2.能设置位置
  • bounds:
    • 只能设置尺寸不能设置位置
  • (CGPoint)center:
    • 只能设置位置不能设置尺寸
  • transform:
    • 能修改大小,位置,旋转角度
@property

(

nonatomic

)

CGRect  frame;@property(nonatomic) CGRect  bounds;@property(nonatomic) CGPoint  center;struct CGRect { CGPoint origin; CGSize size;};typedef struct CGRect CGRect;

  • CGRectGetMaxX

(_mainView.frame) : 获取view的x的值+view的宽度的值

  • CGRectGetMinX

(_mainView.frame) : 获取view的x值

transform

  • CGAffineTransformMakeTranslation

:每次从零开始形变,每次都是相对于最开始的位置形变

  • CGAffineTransformTranslate

:从当前位置开始形变,下一次继续

  • CGAffineTransformRotate

:旋转

  • CGAffineTransformScale

:缩放, 比例

  • CGAffineTransformIdentity

:复位

/***********实现移动效果***************/

-

(IBAction)transRotate:(id)sender { [UIView animateWithDuration:2 animations:^{self.header.transform =  CGAffineTransformRotate(self.header.transform, M_PI_4); // 顺时针移动45°,前面加 "-" 代表逆时针旋转 }];}- (IBAction)transMove:(id)sender {self.header.transform = CGAffineTransformTranslate(self.header.transform, 0, -50); // 向上移动}- (IBAction)transBig:(id)sender { // 缩放 比例 self.header.transform = CGAffineTransformScale(self.header.transform, 1.5, 1.5);}- (IBAction)transSmall:(id)sender { self.header.transform = CGAffineTransformScale(self.header.transform, 0.5, 0.5);}- (IBAction)transform:(id)sender { [UIView animateWithDuration:3 animations:^{ self.header.transform = CGAffineTransformTranslate(self.header.transform, 0, -50); // 向上移动self.header.transform =  CGAffineTransformRotate(self.header.transform, M_PI_4); // 顺时针移动45°,前面加 "-" 代表逆时针旋转 self.header.transform = CGAffineTransformScale(self.header.transform, 1.5, 1.5); }];}// 复位- (IBAction)goBack:(id)sender { self.header.transform = CGAffineTransformIdentity;}

小语法点

不能直接修改OC对象的结构体属性的成员

  • 下面的写法是错误的
imageView

.

frame

.

size

= imageView.image.size;

  • 正确写法
CGRect

tempFrame = imageView.frame;tempFrame.size = imageView.image.size;imageView.frame = tempFrame;

返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,…) { 函数体 }

  • 主要作用:1.将一个常用的功能封装起来,方便以后调用2.提高代码重用率

  • 形参:

 在定义函数时,函数名后面的小括号()中定义的变量称为形式参数,简称形参,形参一定是变量形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。函数调用结束返回主调函数后则不能再使用该形参变量。

  • 实参:

 在调用函数时传入的值称为实际参数,简称实参,实参可以是常量,变量,表达式

  • 注意点:

1) 返回值可以和返回值类型不一样,系统会对返回值进行自动类型转换(隐式转换)2) 如果函数没有返回值,那么返回值类型就写void3) 函数名称不能相同,形参,返回值类型不同也不行,即不能重载4) c语言不允许函数嵌套5) 函数可以没有返回值类型,默认返回int类型6) 调用函数时传递的实参个数必须和函数的形参个数必须保持一致

  • return 0:

 返回0表示程序正确结束,其他值代表程序非正常结束

  • argc:

 系统传递进来的参数,默认为1

  • argv:

 系统传递进来的参数的实际值,默认是程序的名称

递归练习

需求

:

要求用户输入一个大于

0

的数

,

如何不大于

0

一值提示

,

知道大于

0

为止

#include

void

scanNumber();int main(int argc, const char * argv[]) { scanNumber(); return 0;}void scanNumber(){ // 接收值 printf("请输入一个大于0的数字:\n"); int number = -1;     scanf("%d", &number); // 判断 if (number <= 0) { scanNumber(); }else{printf("m=%d\n", number); } // 递归要有明确的结束条件,防止死循环}

用递归算法求累加和、累乘

#include 

int

sum(int a); // 求累加和int mul(int b);// 求累乘int main(){ // 接收值 printf("请输入一个大于0的数字:\n"); int number = -1; scanf("%d", &number); printf("sum = %d\n", sum(number)); printf("mul = %d\n", mul(number)); return 0;}int sum(int a){ int result = 1; if(a == 1){ return result; }else{ return sum(a-1) + a; }}int mul(int b){ int result = 1;if(b == 1){ return result; }else{ return uml(b-1) * b; }}

函数的嵌套调用与递归调用有什么区别?

答:
    函数的嵌套是语言特性,递归是逻辑思想;

    函数嵌套就是允许函数中调用另一个函数,

    递归通过函数嵌套来实现,自己调用自己,

总的来说,函数嵌套就是函数调用函数,递归就是函数调用自己,是函数嵌套的一个特例

学习ios  重要还是要理清楚思路  在做或者看老师代码的时候 自己多想想为什么  不要自己看着就抄       另外还是要推荐一下 蓝懿IOS这个培训机构  和刘国斌老师刘国斌老师还是很有名气的,听朋友说刘老师成立了蓝懿iOS,,老师讲课方式很独特,能够尽量让每个人都能弄明白,有的比较难懂的地方,如果有的地方还是不懂得话,老师会换个其它方法再讲解,这对于我们这些学习iOS的同学是非常好的,多种方式的讲解会理解得更全面,这个必须得给个赞,嘻嘻,还有就是这里的学习环境很好,很安静,可以很安心的学习,安静的环境是学习的基础,小班讲课,每个班20几个学生,学习氛围非常好,每天都学到9点多才离开教室,练习的时间很充裕,而且如果在练习的过程中有什么困难,随时可以向老师求助,不像其它机构,通过视频教学,有的甚至学完之后都看不到讲师本人,问点问题都不方便,这就是蓝懿与其它机构的区别,相信在刘国斌老师的细心指导下,每个蓝懿学员都能找到满意的工作,加油!

  •                                                                   写博客第一百一十天;

                                                                              QQ:565803433



  • 概念:凡是继承自UIViewController的对象,都叫做控制器
  • 注意:每一个控制器都会专门管理一个软件界面
  • 作用:负责处理软件界面的各种事件、负责软件界面的创建和销毁

IBAction

  • 只能修饰方法的返回值类型
  • 被IBAction修饰的方法
    • 能拖线到storyboard中
    • 返回值类型实际是void
  • 使用格式
- (IBAction)buttonClick
{

}

IBOutlet

  • 通过IBOutlet修饰的成员属性虽然外部是weak修饰的,但IBOutlet内部隐藏一个强指针
  • 在对象被销毁时,并不会立马被清空,只有当发现没有别的指针只用该成员属性时IBoutlet内部隐藏的强指针才会释放,对象才会被销毁

  • 只能修饰属性

  • 被IBOutlet修饰的属性

    • 能拖线到storyboard中
  • 使用格式

@property (nonatomic, weak) IBOutlet UILabel *label;

关于IBAction、IBOutlet前缀IB的解释

  • 全称:Interface Builder
  • 以前的UI界面开发模式:Xcode3 + Interface Builder
  • 从Xcode4开始,Interface Builder已经整合到Xcode中了

类扩展(Class Extension)

  • 作用
    • 能为某个类增加额外的属性、成员变量、方法声明
    • 一般将类扩展写到.m文件中
    • 一般将一些私有的属性写到类扩展
  • 使用格式
@interface 类名()
/* 属性、成员变量、方法声明 */
@end
  • 与分类的区别

    • 分类的小括号必须有名字 ```objc @interface 类名(分类名字) /* 方法声明 */ @end

    @implementation 类名(分类名字)
    /* 方法实现 */
    @end
    ```
    - 分类只能扩充方法
    - 如果在分类中声明了一个属性,分类只会生成这个属性的get\set方法声明

tag

1.使用tag根据父控件能取出当前内部子控件
2.使用tag能判断点击的哪个按钮

- (UIView *)viewWithTag:(NSInteger)tag;

addSubview:

任何控件都能往自身内部添加子控件
subViews:子控件
superView:父控件

frame / bounds / center

  • frame:
    • 1.能设置尺寸
    • 2.能设置位置
  • bounds:
    • 只能设置尺寸不能设置位置
  • (CGPoint)center:
    • 只能设置位置不能设置尺寸
  • transform:
    • 能修改大小,位置,旋转角度
@property(nonatomic) CGRect            frame;
@property(nonatomic) CGRect            bounds;
@property(nonatomic) CGPoint           center;

struct CGRect {
  CGPoint origin;
  CGSize size;
};
typedef struct CGRect CGRect;
  • CGRectGetMaxX(_mainView.frame) : 获取view的x的值+view的宽度的值

  • CGRectGetMinX(_mainView.frame) : 获取view的x值

transform

  • CGAffineTransformMakeTranslation:每次从零开始形变,每次都是相对于最开始的位置形变
  • CGAffineTransformTranslate:从当前位置开始形变,下一次继续

  • CGAffineTransformRotate:旋转

  • CGAffineTransformScale:缩放, 比例

  • CGAffineTransformIdentity:复位

/***********实现移动效果***************/

- (IBAction)transRotate:(id)sender {
    [UIView animateWithDuration:2 animations:^{
        self.header.transform =  CGAffineTransformRotate(self.header.transform, M_PI_4); // 顺时针移动45°,前面加 "-" 代表逆时针旋转
    }];
}

- (IBAction)transMove:(id)sender {
    self.header.transform = CGAffineTransformTranslate(self.header.transform, 0, -50); // 向上移动
}

- (IBAction)transBig:(id)sender {
    // 缩放 比例
    self.header.transform = CGAffineTransformScale(self.header.transform, 1.5, 1.5);
}

- (IBAction)transSmall:(id)sender {
    self.header.transform = CGAffineTransformScale(self.header.transform, 0.5, 0.5);
}

- (IBAction)transform:(id)sender {
    [UIView animateWithDuration:3 animations:^{
        self.header.transform = CGAffineTransformTranslate(self.header.transform, 0, -50); // 向上移动
        self.header.transform =  CGAffineTransformRotate(self.header.transform, M_PI_4); // 顺时针移动45°,前面加 "-" 代表逆时针旋转
        self.header.transform = CGAffineTransformScale(self.header.transform, 1.5, 1.5);

    }];
}


// 复位
- (IBAction)goBack:(id)sender {
    self.header.transform = CGAffineTransformIdentity;
}

小语法点

不能直接修改OC对象的结构体属性的成员

  • 下面的写法是错误的
imageView.frame.size = imageView.image.size;
  • 正确写法
CGRect tempFrame = imageView.frame;
tempFrame.size = imageView.image.size;
imageView.frame = tempFrame;
  • 概念:凡是继承自UIViewController的对象,都叫做控制器
  • 注意:每一个控制器都会专门管理一个软件界面
  • 作用:负责处理软件界面的各种事件、负责软件界面的创建和销毁

IBAction

  • 只能修饰方法的返回值类型
  • 被IBAction修饰的方法
    • 能拖线到storyboard中
    • 返回值类型实际是void
  • 使用格式
- (IBAction)buttonClick
{

}

IBOutlet

  • 通过IBOutlet修饰的成员属性虽然外部是weak修饰的,但IBOutlet内部隐藏一个强指针
  • 在对象被销毁时,并不会立马被清空,只有当发现没有别的指针只用该成员属性时IBoutlet内部隐藏的强指针才会释放,对象才会被销毁

  • 只能修饰属性

  • 被IBOutlet修饰的属性

    • 能拖线到storyboard中
  • 使用格式

@property (nonatomic, weak) IBOutlet UILabel *label;

关于IBAction、IBOutlet前缀IB的解释

  • 全称:Interface Builder
  • 以前的UI界面开发模式:Xcode3 + Interface Builder
  • 从Xcode4开始,Interface Builder已经整合到Xcode中了

类扩展(Class Extension)

  • 作用
    • 能为某个类增加额外的属性、成员变量、方法声明
    • 一般将类扩展写到.m文件中
    • 一般将一些私有的属性写到类扩展
  • 使用格式
@interface 类名()
/* 属性、成员变量、方法声明 */
@end
  • 与分类的区别

    • 分类的小括号必须有名字 ```objc @interface 类名(分类名字) /* 方法声明 */ @end

    @implementation 类名(分类名字)
    /* 方法实现 */
    @end
    ```
    - 分类只能扩充方法
    - 如果在分类中声明了一个属性,分类只会生成这个属性的get\set方法声明

tag

1.使用tag根据父控件能取出当前内部子控件
2.使用tag能判断点击的哪个按钮

- (UIView *)viewWithTag:(NSInteger)tag;

addSubview:

任何控件都能往自身内部添加子控件
subViews:子控件
superView:父控件

frame / bounds / center

  • frame:
    • 1.能设置尺寸
    • 2.能设置位置
  • bounds:
    • 只能设置尺寸不能设置位置
  • (CGPoint)center:
    • 只能设置位置不能设置尺寸
  • transform:
    • 能修改大小,位置,旋转角度
@property(nonatomic) CGRect            frame;
@property(nonatomic) CGRect            bounds;
@property(nonatomic) CGPoint           center;

struct CGRect {
  CGPoint origin;
  CGSize size;
};
typedef struct CGRect CGRect;
  • CGRectGetMaxX(_mainView.frame) : 获取view的x的值+view的宽度的值

  • CGRectGetMinX(_mainView.frame) : 获取view的x值

transform

  • CGAffineTransformMakeTranslation:每次从零开始形变,每次都是相对于最开始的位置形变
  • CGAffineTransformTranslate:从当前位置开始形变,下一次继续

  • CGAffineTransformRotate:旋转

  • CGAffineTransformScale:缩放, 比例

  • CGAffineTransformIdentity:复位

/***********实现移动效果***************/

- (IBAction)transRotate:(id)sender {
    [UIView animateWithDuration:2 animations:^{
        self.header.transform =  CGAffineTransformRotate(self.header.transform, M_PI_4); // 顺时针移动45°,前面加 "-" 代表逆时针旋转
    }];
}

- (IBAction)transMove:(id)sender {
    self.header.transform = CGAffineTransformTranslate(self.header.transform, 0, -50); // 向上移动
}

- (IBAction)transBig:(id)sender {
    // 缩放 比例
    self.header.transform = CGAffineTransformScale(self.header.transform, 1.5, 1.5);
}

- (IBAction)transSmall:(id)sender {
    self.header.transform = CGAffineTransformScale(self.header.transform, 0.5, 0.5);
}

- (IBAction)transform:(id)sender {
    [UIView animateWithDuration:3 animations:^{
        self.header.transform = CGAffineTransformTranslate(self.header.transform, 0, -50); // 向上移动
        self.header.transform =  CGAffineTransformRotate(self.header.transform, M_PI_4); // 顺时针移动45°,前面加 "-" 代表逆时针旋转
        self.header.transform = CGAffineTransformScale(self.header.transform, 1.5, 1.5);

    }];
}


// 复位
- (IBAction)goBack:(id)sender {
    self.header.transform = CGAffineTransformIdentity;
}

小语法点

不能直接修改OC对象的结构体属性的成员

  • 下面的写法是错误的
imageView.frame.size = imageView.image.size;
  • 正确写法
CGRect tempFrame = imageView.frame;
tempFrame.size = imageView.image.size;
imageView.frame = tempFrame;

你可能感兴趣的:(蓝懿ios技术交流和心得分享 16.1.28)