代码细节

一、结构体不能直接赋值

// 1. 改变头像的frame

// 1.1 获得当前头像的中心点, 并且临时保存起来

CGPoint tempCenter = self.headBtn.center;

// 1.2 修改临时结构体变量的值

tempCenter.y -= 10;

// 1.3 把修改完的结构体变量赋值给头像

self.headBtn.center = tempCenter;

// 1.1 获得当前头像的frame, 并且临时保存起来

CGRect tempFrame = self.headBtn.bounds;

// 1.2 修改临时结构体变量的值

tempFrame.size.width += 10;

tempFrame.size.height += 10;

// 1.3 把修改完的结构体变量赋值给头像

self.headBtn.bounds = tempFrame;

NSLog(@"%@", NSStringFromCGSize(self.headBtn.bounds.size));


⭐️frame:位置/尺寸

⭐️bounds:尺寸            CGRect

⭐️center:位置              CGPoint

⭐️transform:位置/大小/旋转

二、控件的transform属性

>>1. 平移

// 修改head的形变属性,在head "初始位置" 的基础上,y方向-100

head.transform = CGAffineTransformMakeTranslation(0, -100);

// 修改head的形变属性,在head "当前位置" 的基础上,y方向-100

head.transform = CGAffineTransformTranslate(head.transform, 0, -100);

>>2. 旋转

// 修改head的形变属性,在head "初始角度" 的基础上,逆时针旋转45°

head.transform = CGAffineTransformMakeRotation(-M_PI_4);

// 修改head的形变属性,在head "当前角度" 的基础上,逆时针旋转45°

head.transform = CGAffineTransformRotate(head.transform, M_PI_4);

>>3. 缩放

// 修改head的形变属性,在head "初始大小" 的基础上,x/y方向都拉伸1.5倍

head.transform = CGAffineTransformMakeScale(1.5, 1.5);

// 修改head的形变属性,在head "当前大小" 的基础上,x/y方向都拉伸1.5倍

head.transform = CGAffineTransformScale(head.transform, 1.5, 1.5);

三、instancetype和id的区别

/**

instancetype与id的区别

1. instancetype可以动态监测当前对象的真实类型, id只有在程序运行的时候才会知道当前对象的真实类型

2. instancetype只能作为返回值, 不能声明变量的.

*/

四、纯代码封装view的细节

1>  建议在:

- (id)initWithFrame:(CGRect)frame

方法里面初始化所有的子控件,并且添加到父控件上。但是不要在这里设置frame

2>  在 - (void)layoutSubviews方法里面设置子控件的frame

使用这个方法的时候注意:一定要调用

[super layoutSubviews];

3>  包含进来一个数据模型,重写模型的setter方法,给子控件设置数据

你可能感兴趣的:(代码细节)