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_490)

在某个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; 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。