(一)UI设计的一些常识
@interface ViewController ()
@end
注意小括号内不能放任何内容,在其内部写声明,可以封装起来内容不要给外界使用。
可以保证封装性。
@interface ViewController ()
- (IBAction)compute;
@property (nonatomic,weak) IBOutlet UITextField *num1;
@property (nonatomic,weak) IBOutlet UITextField *num2;
@property (nonatomic,weak) IBOutlet UILabel *result;
@end
CGRect tempFrame = self.head.frame;
tempFrame.origin.y -= 10;
self.head.frame = tempFrame;
通过frame既可以改位置,又可以改大小。
3.查错:
先在相应的方法里加断点,看有没有进入。
其次可以用NSLog。
打印结构体:NSStringFromCGRect();
发现不能改变图片大小:AutoLayout影响的。
代码的优化:例如上下左右四个按钮用一个方法实现。
多个按钮可以拖到同一个IBAction上面。
!当按钮对应的方法有参数时,会把被点击的按钮当做参数传入,例如是按钮,要传入UIButton *
注意修改IBAction后要重新连线。
标识不同的sender,绑定不同的tag。
输入一个数值Tag。
修改控件位置:修改frame与center。
3.设定center
center是CGPoint,可以修改位置。
4.设定bounds
bounds以自己的左上角为坐标原点,但是可以改尺寸。
bounds修改尺寸中心不动,但是frame改尺寸左上角不动。
总结:
frame:修改位置和尺寸(左上角不动)
center:修改位置
bounds:修改尺寸(中心不动)
5.通过代码创建按钮
viewDidLoad方法,在控制器和View被创建完毕后会调用。
创建->加入->改参数
UIButton *btn = [[UIButton alloc] init];
[self.view addSubview:btn];
btn.frame = CGRectMake(100, 100, 100, 100);
UIImage *imgNormal = [UIImage imageNamed:@"btn_01"];
UIImage *imgHighlighted = [UIImage imageNamed:@"btn_02"];
[btn setBackgroundImage:imgNormal forState:UIControlStateNormal];
[btn setBackgroundImage:imgHighlighted forState:UIControlStateHighlighted];
[btn setTitle:@"点我啊" forState:UIControlStateNormal];
[btn setTitle:@"点我干啥" forState:UIControlStateHighlighted];
[btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
[btn setTitleColor:[UIColor blueColor] forState:UIControlStateHighlighted];
创建自定义代码的另一种方法:在storyboard中设置后会转为相应的代码。
使用的是buttonWithType类方法创建。
storyboard能办到的东西,代码都能办到。
修改系统默认的按钮类型:
使用代码设置按钮类型:
UIButton *btnInfo = [UIButton buttonWithType:UIButtonTypeRoundedRect];
系统自带的不必设置尺寸。用center来改位置。
通过代码来监听按钮事件:
Target代表的是当前View,这里的self就是当前View。
注意action要包装在@section内。
[btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
- (void)btnClick:(UIButton *)button{
NSLog(@"clich the button %@",button);
}
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5]; //默认是0.25秒一帧。
[UIView commitAnimations];
bounds为了保证center不变,有一个挪动。
IOS常见的属性改变(如背景变色)都可以使用系统的动画,复杂动画需要自己实现。
补充一些控件和属性
self.head.transform = CGAffineTransformMakeTranslation(deltaX, deltaY);
注意的是形变属性只允许有一种状态。这是在原来的基础上的改变,多次实施依然deltaX=-100。
解决方法是将deltaX叠加。
最有解决方案:在一个transform基础上生成新的。
self.head.transform = CGAffineTransformTranslate(self.head.transform, 0, -50);
旋转:注意是弧度制的旋转。
self.head.transform = CGAffineTransformRotate(self.head.transform, M_PI_4);
缩放:填写的是x方向与y方向的缩放比例。
self.head.transform = CGAffineTransformScale(self.head.transform, 1.2, 1.2);
特殊场合用transform,平时可用center、frame、bounds。
UIImage的使用
self.xxximgView.image = [UIImage imageNamed:@“…”];
禁用控件:
btn.enabled = NO;
Disable默认是变灰,也可以修改图片。
试着去精简自己的代码。
除去对象以外的内容用strong。
数据的处理方式:
先把一个数据组写成字典(NSMutabeDictionary可以用[ ]索引来创建键值对)。
然后把字典放入数组。
使用的时候先取出字典,然后使用。
对于key,为了防止前后不一致,可以用#define写宏
有的公司以k开头有的公司以公司前缀开头。
get方法里面千万不要用self,会产生死循环。
延迟加载(懒加载):保证性能,将属性放到get方法中初始化。
用到的功能在使用时加载,例如有些数据只有查看时才将相应的数据初始化。
可以通过重写相应的get方法,注意在get方法用 _xxx == nil来判断是否加载过,千万不要用self,会死循环。