1、OC语法规定:不允许直接修改某个对象中结构体属性的成员。只能整体对结构体修改。
例:
//不能这样赋值: xx.frame.origin.x = tempX //而是应该直接给frame赋值
2、
- (IBAction)move:(id)sender{ }
这种上下文下,id类型的对象,是不能用sender.tag的,必须用[sender tag]
3、如果使用常量,建议使用宏,这样可以避免开内存
下面声明宏中,k表示常亮
在interface上,#import下,#define kDelta 50
当然也可以在interface上,#import下,直接写成常亮const int delta = 50;
4、控件的属性
frame,表示控件的位置和尺寸,以父控件左上角的原点为坐标原点(0,0)。返回CGRect
CGRect frame = self.flowerImage.frame;
center,表示控件的中点,以父控件左上角的原点位左边原点(0,0)。
bounds,表示控件的位置和尺寸,以自己左上角坐标位原点(0,0),修改此属性,只能调整控件的尺寸。
transform,表示控件的形变状态
self.flowerImage.transform = CGAffineTransformRotate(self.flowerImage.transform, [sender tag] == 4 ? -M_PI_4 : M_PI_4);
5、得到手机界面的高度宽度
self.view.frame.width
6、代码添加按钮,用buttonWithType来生成BUTTON,这样如果在老IOS中,也不用手动释放内存
添加按钮监听事件
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; //圆角矩形会挡住代码设置的Button背景颜色,如果要改背景色,则type需改成customer类型 [button setFrame:CGRectMake(50, 300, 100, 20)]; [button setTitle:@"别摸我" forState:UIControlStateNormal]; [button addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
self表示当前的viewController
[self.view addSubview:button];
点击事件的方法:
- (void) btnClick:(id)btn { NSLog(@"====%d", [btn tag]); }
7、读取项目中的资源
NSBundle *bundle = [NSBundle mainBundle]; NSString *path = [bundle pathForResource:@"文件名", ofType:@"文件后缀名"]; //读取一个plist文件 NSArray *array = [NSArray arrayWithContentsOfFile:path];
8、关闭键盘
//这里的YES或NO,都是关闭键盘,但NO为某些特殊情况下不关闭键盘 //没有找到哪些是特殊情况 [self.view endEditing:YES]
9、动画效果除了“开启动画,提交动画”的这种方式
还可用一句话写出来
[UIView animateWithDuration:1 animations:^{ block(); } completion:^(BOOL finished) { NSLog(@"动画完成"); }]; NSLog(@"动画提交"); //先打印"动画提交",再打印动画完成。
10、代码添加按钮,用buttonWithType来生成BUTTON,这样如果在老IOS中,也不用手动释放内存
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; //圆角矩形会挡住代码设置的Button背景颜色,如果要改背景色,则type需改成customer类型 [button setFrame:CGRectMake(50, 300, 100, 20)]; [button setTitle:@"别摸我" forState:UIControlStateNormal]; [self.view addSubview:button];