1.退出键盘的两种⽅方式
• resignFirstResponder
➢ 当叫出键盘的那个控件(第⼀一响应者)调用这个⽅方法时,就能退出键盘• endEditing
➢ 只要调⽤用这个⽅方法的控件内部存在第⼀一响应者,就能退出键盘
2.UIView的常⻅见属性
➢ @property(nonatomic,readonly) UIView *superview;
➢ 获得⾃自⼰己的⽗父控件对象
➢ @property(nonatomic,readonly,copy) NSArray *subviews;
➢ 获得⾃己的所有⼦子控件对象
➢ @property(nonatomic) NSInteger tag;
➢ 控件的ID\标识,⽗父控件可以通过tag来找到对应的⼦子控件
➢ @property(nonatomic) CGAffineTransform transform;
➢ 控件的形变属性(可以设置旋转⾓角度、⽐比例缩放、平移等属性)
➢@property(nonatomic) CGRect frame;
➢控件所在矩形框在⽗父控件中的位置和尺⼨寸(以⽗父控件的左上⾓角为坐标原点)
➢@property(nonatomic) CGRect bounds;
➢以⾃自⼰己左上⾓角为坐标原点,所以bounds的x\y⼀一般为0)
➢@property(nonatomic) CGPoint center;
➢控件中点的位置(以⽗父控件的左上⾓角为坐标原点)
3.UIView的常⻅见⽅方法
➢ - (void)addSubview:(UIView *)view;
➢ 添加⼀一个⼦子控件view
➢ - (void)removeFromSuperview;
➢ 从⽗父控件中移除
➢ - (UIView *)viewWithTag:(NSInteger)tag;
➢ 根据⼀一个tag标识找出对应的控件(⼀一般都是⼦子控件)
4.实现简单动画
• 在iOS开发中,想实现⼀一些⼩小动画是⾮非常容易的
➢ 系统会根据某个属性值的改变⾃自动形成动画
➢ ⽐比如x值本来是10,然后x值突然改为了100,系统会通过平移动画的⽅方式让x值慢慢从 10变到100
• 简易动画⼤大致有2种⽅方式:
➢ 头尾式[UIView beginAnimations:nil context:nil]; /** 需要执⾏行动画的代码**/
[UIView commitAnimations];➢ Block式[UIView animateWithDuration:0.5 animations:^{/** 需要执⾏行动画的代码}];
5.修改控件的位置和尺⼨寸
• 通过以下属性可以修改控件的位置
➢ frame.origin
➢ center• 通过以下属性可以修改控件的尺⼨寸
➢ frame.size
➢ bounds.size7.transform属性
利⽤用transform属性可以修改控件的位移(位置)、缩放、旋转
创建⼀一个transform属性
➢ CGAffineTransform CGAffineTransformMakeTranslation(CGFloat tx, CGFloat ty) ;
➢ CGAffineTransform CGAffineTransformMakeScale(CGFloat sx, CGFloat sy);
➢ CGAffineTransform CGAffineTransformMakeRotation(CGFloat angle)
➢ (angle是弧度制,并不是⾓角度制 M_PI_4为90度)
在某个transform的基础上进行叠加
➢ CGAffineTransform CGAffineTransformTranslate(CGAffineTransform t, CGFloat tx, CGFloatty);
➢ CGAffineTransform CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy);
➢ CGAffineTransform CGAffineTransformRotate(CGAffineTransform t, CGFloat angle);
• 清空之前设置的transform属性
➢ view.transform = CGAffineTransformIdentity;
6.UIButton和UIImageView
• 相同点:都能显⽰示图⽚片
• 不同点➢ UIButton默认情况就能监听点击事件,⽽而UIImageView默认情况下不能
➢ UIButton可以在不同状态下显⽰示不同的图⽚片➢ UIButton既能显⽰示⽂文字,又能显⽰示图⽚片
• 如何选择➢ UIButton:需要显⽰示图⽚片,点击图⽚片后需要做⼀一些特定的操作
➢ UIImageView:仅仅需要显⽰示图⽚片,点击图⽚片后不需要做任何事情
7.NSArray和NSDictionary的使⽤用
• 当图⽚内容非常多时,“根据index来设置内容”的代码就不具备扩展性,要经常改动
• 为了改变现状,可以考虑讲图⽚片数据线保存到⼀一个数组中,数组中有序地放着很多字典,
一个字典代表⼀张图片数据,包含了图片名、图片描述
@property (strong, nonatomic) NSArray *images;
• 由于只需要初始化⼀一次图⽚片数据,因此放在get⽅方法中初始化
• 将属性放在get⽅方法中初始化的⽅方式,称为“懒加载”\”延迟加载”8.什么是Plist文件
• 直接将数据直接写在代码⾥里⾯面,不是⼀一种合理的做法。如果数据经常改,就 要经常翻开对应的代码进⾏行修改,造成代码扩展性低
• 因此,可以考虑将经常变的数据放在⽂文件中进⾏行存储,程序启动后从⽂文件中 读取最新的数据。如果要变动数据,直接修改数据⽂文件即可,不⽤用修改代码
• ⼀一般可以使⽤用属性列表⽂文件存储NSArray或者NSDictionary之类的数据,这种 属性列表⽂文件的扩展名是plist,因此也成为“Plist⽂文件”
9.解析Plist⽂文件
• 接下来通过代码来解析Plist⽂文件中的数据
➢ 获得Plist⽂文件的全路径NSBundle *bundle = [NSBundle mainBundle];
NSString *path = [bundle pathForResource:@"imageData" ofType:@"plist"];➢ 加载plist⽂文件_images = [NSArray arrayWithContentsOfFile:path];
- (NSArray *)images
{
(_images == nil) {
*bundle = [NSBundle mainBundle];
*path = [bundle pathForResource:@"imageData" ofType:@"plist"];
= [NSArray arrayWithContentsOfFile:path];
}
_images;
}
10.UIImageView帧动画相关属性和⽅方法
• @property(nonatomic,copy) NSArray *animationImages;
➢ 需要播放的序列帧图⽚片数组(⾥里⾯面都是UIImage对象,会按顺序显⽰示⾥里⾯面的图⽚片)• @property(nonatomic) NSTimeInterval animationDuration; ➢ 帧动画的持续时间
• @property(nonatomic) NSInteger animationRepeatCount; ➢ 帧动画的执⾏行次数(默认是⽆无限循环)
• - (void)startAnimating; ➢ 开始执⾏行帧动画
• - (void)stopAnimating; ➢ 停⽌止执⾏行帧动画
• - (BOOL)isAnimating; ➢ 是否正在执⾏行帧动画
11.UIImage的2种加载⽅方式
• ⽅方式⼀一:有缓存(图⽚片所占⽤用的内存会⼀一直停留在程序中)
➢ + (UIImage *)imageNamed:(NSString *)name;
➢ name是图⽚片的⽂文件名
• ⽅方式⼆二:⽆无缓存(图⽚片所占⽤用的内存会在⼀一些特定操作后被清除)
➢ + (UIImage *)imageWithContentsOfFile:(NSString *)path
➢ - (id)initWithContentsOfFile:(NSString *)path; ➢ path是图⽚片的全路径
12.⽤用模型取代字典的好处
• 使⽤用字典的坏处➢ ⼀一般情况下,设置数据和取出数据都使⽤用“字符串类型的key”,编写这些key时,编译器不会有任何友善提⽰示,需要⼿手敲
➢ dict[@"name"] = @"Jack";
➢ NSString *name = dict[@"name"];
⼿手敲字符串key,key容易写错 Key如果写错了,编译器不会有任何警告和报错,造成设错数据或者取错数据
13.使⽤用模型的好处
所谓模型,其实就是数据模型,专门⽤用来存放数据的对象,⽤用它来表⽰示数据会更加专业模型设置数据和取出数据都是通过它的属性,属性名如果写错了,编译器会马上报错,因此,保证了数据的正确性
使⽤用模型访问属性时,编译器会提供⼀一系列的提⽰示,提⾼高编码效率
app.name = @"Jack”;
NSString *name = app.name;
14.字典转模型
• 字典转模型的过程最好封装在模型内部
• 模型应该提供⼀一个可以传⼊入字典参数的构造⽅方法
➢ -(instancetype)initWithDict:(NSDictionary*)dict; ➢ +(instancetype)xxxWithDict:(NSDictionary*)dict;
instancetype
• instancetype在类型表⽰示上,跟id⼀一样,可以表⽰示任何对象类型
• instancetype只能⽤用在返回值类型上,不能像id⼀一样⽤用在参数类型上
• instancetype⽐比id多⼀一个好处:编译器会检测instancetype的真实类型
15.Xib⽂文件的使⽤用
• Xib⽂文件可以⽤用来描述某⼀一块局部的UI界⾯面
• Xib⽂文件的加载 ➢ ⽅方法1
NSArray *objs = [[NSBundle mainBundle] loadNibNamed:@"MJAppView" owner:nil
options:nil];
这个⽅方法会创建xib中的所有对象,并且将对象按顺序放到objs数组中xib如右图所⽰示,那么objs数组中依次会有3个对象:1个UIView、1个UIButton、1个UISwitch)
➢ ⽅方法2 bundle参数可以为nil,默认就是main bundle
UINib *nib = [UINib nibWithNibName:@"MJAppView" bundle:[NSBundle mainBundle]];
NSArray *objs = [nib instantiateWithOwner:nil options:nil];
• 在开发阶段,⾯面向开发者的是xib⽂文件; 当把应⽤用装到⼿手机上时,xib⽂文件就会转为nib⽂文件
16.Xib和storyboard对⽐比
• 共同点:➢ 都⽤用来描述软件界⾯面➢ 都⽤用Interface Builder⼯工具来编辑
• 不同点
➢ Xib是轻量级的,⽤用来描述局部的UI界⾯面
➢ Storyboard是重量级的,⽤用来描述整个软件的多个界⾯面,并且能展⽰示多个界⾯面之间的跳 转关系
17.UILabel的常⻅见设置
• @property(nonatomic,copy) NSString *text;
➢ 显⽰示的⽂文字
• @property(nonatomic,retain)UIFont *font;
➢ 字体
• @property(nonatomic,retain) UIColor *textColor;
➢ ⽂文字颜⾊色
• @property(nonatomic) NSTextAlignment textAlignment;
➢ 对⻬齐模式(⽐比如左对⻬齐、居中对⻬齐、右对⻬齐)
18.UIFont
• UIFont代表字体,常见创建⽅方法有以下⼏几个:➢ + (UIFont *)systemFontOfSize:(CGFloat)fontSize;
系统默认字体
➢ + (UIFont *)boldSystemFontOfSize:(CGFloat)fontSize; 粗体
➢ + (UIFont *)italicSystemFontOfSize:(CGFloat)fontSize; 斜体19.UIButton的常⻅见设置
• - (void)setTitle:(NSString *)title forState:(UIControlState)state; ➢ 设置按钮的⽂文字
• - (void)setTitleColor:(UIColor *)color forState:(UIControlState)state; ➢ 设置按钮的⽂文字颜⾊色
• -(void)setImage:(UIImage*)imageforState:(UIControlState)state; ➢ 设置按钮内部的⼩小图⽚片
• - (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state; ➢ 设置按钮的背景图⽚片
• 设置按钮的⽂文字字体(需要拿到按钮内部的label来设置)
➢ btn.titleLabel.font=[UIFontsystemFontOfSize:13];• -(NSString*)titleForState:(UIControlState)state;
➢ 获得按钮的⽂文字
• - (UIColor *)titleColorForState:(UIControlState)state;
➢ 获得按钮的⽂文字颜⾊色
• - (UIImage *)imageForState:(UIControlState)state;
➢ 获得按钮内部的⼩小图⽚片
• - (UIImage *)backgroundImageForState:(UIControlState)state;
➢ 获得按钮的背景图⽚片
20.状态栏
• 在iOS7中,状态栏默认情况下归控制器管理,⽐比如状态栏的样式、状态栏的是否可见
• 控制器通过重写以下⽅方法来控制状态栏
➢ 设置状态栏的样式
- (UIStatusBarStyle)preferredStatusBarStyle;
其中UIStatusBarStyleLightContent是⽩白⾊色样式
➢ 设置状态栏的可见性
- (BOOL)prefersStatusBarHidden;
21.UIButton
• UIButton有很多种状态,它提供了⼀一些便捷属性,可以直接获取当前状态下的⽂文字、⽂文 字颜⾊色、图⽚片等
• @property(nonatomic,readonly,retain)NSString*currentTitle;
• @property(nonatomic,readonly,retain) UIColor *currentTitleColor;
• @property(nonatomic,readonly,retain) UIImage *currentImage;
• @property(nonatomic,readonly,retain) UIImage *currentBackgroundImage;