IOS基本控件知识点总结(一)
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.size
7.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
{
if (_images == nil) {
NSBundle *bundle = [NSBundle mainBundle];
NSString *path = [bundle pathForResource:@"imageData" ofType:@"plist"];
_images = [NSArray arrayWithContentsOfFile:path];
}
return _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;
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。