如何修改控件状态
• 可见,确实需要经常修改控件状态
• 那如何去修改控件的状态呢?方法很简单
? 每一个UI控件都是一个对象
? 修改UI控件的状态,其实就是修改控件对象的属性
? 比如修改UILabel显示的文字,就修改UILabel对象的text属性即可
? 比如修改UIImageView显示的图片,就修改UIImageView对象的image属性即可
• 不难想到,每一个UI控件肯定都有很多属性,比如:
? UIProgressView进度条控件有progress属性(进度值)
? UILabel和UITextField都有text属性(显示文字)
?......
虽然,每一个UI控件都有自己的独特属性,但是有些属性是每个UI控件都具备的,
比如每一个UI控 件都有自己的位置和尺寸、都有自己的父控件、子控件。
于是,所有的UI控件最终都继承自 UIView,UI控件的公共属性都定义在UIView中,
比如:
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;
控件中点的位置(以父控件的左上角为坐标原点)
在UIKit中,坐标系的原点(0,0)在左上角,x值向右正向延伸,y值向下正向延伸
UIView的常见方法
? - (void)addSubview:(UIView *)view;
? 添加一个子控件view
? - (void)removeFromSuperview;
? 从父控件中移除
? - (UIView *)viewWithTag:(NSInteger)tag;
? 根据一个tag标识找出对应的控件(一般都是子控件)
去除autolayout
• 如果发现通过代码无法修改控件的位置 或者尺寸时,应该去掉storyboard里面的 autolayout功能,这是自iOS6开始出现的 特性
• 顾名思义,autolayout是用来自动布局 的,用来束缚控件的位置和尺寸。去掉 这个功能,控件的位置和尺寸就不再有 一些固定的束缚。
UIButton的状态
• normal(普通状态)
? 默认情况(Default)
? 对应的枚举常量:UIControlStateNormal
• highlighted(高亮状态)
? 按钮被按下去的时候(手指还未松开)
? 对应的枚举常量:UIControlStateHighlighted
• disabled(失效状态,不可用状态)
? 如果enabled属性为NO,就是处于disable状态,代表按钮不可以被点击
? 对应的枚举常量:UIControlStateDisabled
设置按钮的背景图片
• 设置按钮在不同状态下的背景图片 (为了保证高亮状态下的图片正常显示,必须设置按钮的type为custom)
修改头像按钮的位置
• 通过修改控件的frame属性就可以修改控件在屏幕上的位置和尺寸
• 比如点击“向上”按钮,让按钮的y值减小即可
- (IBAction)top:(UIButton *)sender {
CGRect btnFrame = self.headBtn.frame;
btnFrame.origin.y -= 10;
self.headBtn.frame = btnFrame;
}
• 下面代码是错误的,OC语法规定:不允许直接修改对象的结构体属性的成员
self.headBtn.frame.origin.y -= 10;
实现简单动画
• 在iOS开发中,想实现一些小动画是非常容易的
? 系统会根据某个属性值的改变?自动形成动画
? 比如x值本来是10,然后x值突然改为了100,系统会通过平移动画的方式让x值慢慢从 10变到100
• 简易动画大致有2种方式:
? 头尾式
[UIView beginAnimations:nil context:nil]; /** 需要执行动画的代码 **/
[UIView commitAnimations];
? Block式
[UIView animateWithDuration:0.5 animations:^{
/** 需要执行动画的代码 **/ }];
修改控件的位置和尺寸
• 通过以下属性可以修改控件的位置 ? frame.origin
? center
• 通过以下属性可以修改控件的尺寸 ? frame.size
? bounds.size
transform属性
利用transform属性可以修改控件的位移(位置)、缩放、旋转
创建一个transform属性
CGAffineTransform CGAffineTransformMakeTranslation(CGFloat tx, CGFloat ty) ;
CGAffineTransform CGAffineTransformMakeScale(CGFloat sx, CGFloat sy);
CGAffineTransform CGAffineTransformMakeRotation(CGFloat angle)
? (angle是弧度制,并不是角度制)
在某个transform的基础上进行叠加
CGAffineTransform CGAffineTransformTranslate(CGAffineTransform t, CGFloat tx, CGFloat
ty);
CGAffineTransform CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy);
CGAffineTransform CGAffineTransformRotate(CGAffineTransform t, CGFloat angle);
• 清空之前设置的transform属性
view.transform = CGAffineTransformIdentity;
常见类型
• 一个UIColor代表一种颜色,通过UIColor的类方法,可以获得很多常用的颜色
?? + (UIColor *)blackColor;
? + (UIColor *)darkGrayColor;
? + (UIColor *)lightGrayColor;
? + (UIColor *)whiteColor;
? + (UIColor *)grayColor;
? + (UIColor *)redColor;
? + (UIColor *)greenColor;
? + (UIColor *)blueColor;
? + (UIColor *)cyanColor;
? + (UIColor *)yellowColor;
? + (UIColor *)magentaColor;
? + (UIColor *)orangeColor;
? + (UIColor *)purpleColor;
? + (UIColor *)brownColor;
? + (UIColor *)clearColor; (空色)