简单了解
- 程序执行的过程?
- 系统读取Main.storyboard;
- 创建箭头所指向的控制器;
- 根据storyboard文件中描述创建UIViewController的UIView对象,以及UIView内部的所有子控件;
- 将控制器的根view以及内部的子控件显示在屏幕上。
- UIView和UIViewController?
- 屏幕上所有能看的见的东西都是UIView,所有的控件都继承自UIView,UIView是一个容器,能容纳其他的任何控件;
- UIViewController用来管理界面上的UIView。每当显示一个新界面时,首先会创建一个新的UIViewController对象,然后创建一个对应的全屏的UIView,UIViewController负责管理这个全屏的UIView;
- UIViewController就是UIView的大管家,负责创建、显示、销毁UIView,负责监听UIView的内部事件,负责处理UIView与用户的交互;
- UIViewController对象内部有一个UIView的属性。
@property (nonatomic, retain) UIView *view;
- frame、bounds、center的区别?
- frame表示尺寸和位置,位置以父控件左上角为坐标原点;
- bounds表示尺寸和位置,位置以自己左上角为坐标原点,所以一般bounds的x\y一般为0;
- center表示控件的中心点坐标,以父控件的左上角为坐标原点。
@property (nonatomic) CGRect frame;
@property (nonatomic) CGRect bounds;
@property (nonatomic) CGPoint center;
- transform的平移、缩放、旋转?
- transform修改控件位置形状,本质是修改了坐标系;
- 设置某个子控件的tag属性后,可以通过父控件的
viewWithTag:
方法找到子控件; - transform的平移、缩放、旋转都有相对于最初状态的改变方式,以及在当前的transform基础上的改变方式;
- transform的缩放,参数是缩放的倍数;
- transform的旋转:
- 旋转的参数是弧度;
- 如果数值是正数的话,顺时针旋转,如果数值是负值的话,逆时针旋转;
- 特例:如果旋转π,无论正负都是顺时针,如果想逆时针旋转可以设置参数为-(M_PI -M_PI*0.000001)。
- (UIView *)viewWithTag:(NSInteger)tag; // 根据tag取得当前控件内部的子控件,需要类型强转
- (void)removeFromSuperview; // 从父控件中移除
- (void)addSubview:(UIView *)view; // 添加一个子控件view
imgBtn.transform = CGAffineTransformMakeTranslation(0, -20); // 相对于最初状态的平移
imgBtn.transform = CGAffineTransformTranslate(imgBtn.transform, 0, -20); // 在当前的transform基础上平移
imgBtn.transform = CGAffineTransformRotate(imgBtn.transform, M_PI_4); // 在当前transform的基础上顺时针旋转90°
imgBtn.transform = CGAffineTransformScale(imgBtn.transform, 0.5, 0.5); // 在当前transform的基础上缩放
imgBtn.transform = CGAffineTransformIdentity; // 清空之前设置的transform
- 懒加载(延迟加载)?
- 懒加载:只有当使用的时候才去加载数据,数据只会被加载一次,以后再次使用不再重新加载数据;
- 懒加载的使用:重写某个属性的getter方法。
常见控件
- 按钮UIButton?
- UIButton按钮是由UILabel和UIImageView组成的;
- 按钮可以处理点击事件,继承自UIControl;
- 按钮既能显示图片又能显示文字。
+ (id)buttonWithType:(UIButtonType)buttonType; // 类方法创建一个按钮对象
@property(nonatomic) UIEdgeInsets contentEdgeInsets; // 设置按钮内容的边距
@property(nonatomic) UIEdgeInsets titleEdgeInsets; // 设置按钮中文字的边距
@property(nonatomic) UIEdgeInsets imageEdgeInsets; // 设置按钮中图片的边距
@property(nonatomic) BOOL adjustsImageWhenHighlighted; // 高亮状态下是否调整图片
@property(nonatomic) BOOL adjustsImageWhenDisabled; // 禁用状态下是否调整按钮中的图片
@property(nonatomic,readonly) UIButtonType buttonType; // 获取按钮的样式
@property(nonatomic,readonly,retain) NSString *currentTitle; // 获取当前状态下按钮中的文字
@property(nonatomic,readonly,retain) UIColor *currentTitleColor; // 获取当前状态下按钮中的文字颜色
@property(nonatomic,readonly,retain) UIImage *currentImage; // 获取当前状态下按钮中的图片
@property(nonatomic,readonly,retain) UIImage *currentBackgroundImage; // 获取当前状态下按钮中的背景图片
@property(nonatomic,readonly,retain) UILabel *titleLabel; // 获取按钮中的label属性
@property(nonatomic,readonly,retain) UIImageView *imageView; // 获取按钮中的imageView属性
- (void)setTitle:(NSString *)title forState:(UIControlState)state; // 设置不同状态下按钮中的文字
- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state; // 设置不同状态下按钮中的文字颜色
- (void)setImage:(UIImage *)image forState:(UIControlState)state; // 设置不同状态下按钮中的图片
- (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state; // 设置不同状态下按钮中的背景图片
@property(nonatomic,copy) NSString *text; // 文本框文字
@property(nonatomic,retain) UIColor *textColor; // 文字颜色
@property(nonatomic,retain) UIFont *font; // 字体
@property(nonatomic) NSTextAlignment textAlignment; // 对齐方式
@property(nonatomic,copy) NSString *placeholder; // 占位符
@property(nonatomic,copy) NSString *text; // 标签文字
@property(nonatomic,retain) UIFont *font; // 文字字体
@property(nonatomic,retain) UIColor *textColor; // 文字颜色
@property(nonatomic) NSTextAlignment textAlignment; // 文字对齐方式
@property(nonatomic) NSInteger numberOfLines; // 设置为0时自动换行
- 图片UIImageView?
- UIImageView继承自UIView,默认情况下不能处理点击事件;
- 加载图片的两种方式:
-
imageNamed:
当图片使用完成后会把图片缓存在内存中不释放; - 只占用一组图片的内存,
imageWithContentsOfFile:
此方法使用时,图片不能放在Imags.xcassets中。
@property(nonatomic,retain) UIImage *image; // 设置图片
@property(nonatomic,copy) NSArray *animationImages; // 设置UIImageView的帧动画
@property(nonatomic) NSTimeInterval animationDuration; // 动画持续时间
@property(nonatomic) NSInteger animationRepeatCount; // 动画重复次数
- (void)startAnimating; // 开始动画
- (void)stopAnimating; // 结束动画
- (BOOL)isAnimating; // 是否正在执行动画
nameView.layer.cornerRadius = 5;
nameView.layer.masksToBounds = YES;