如何修改控件状态
• 可见,确实需要经常修改控件状态• 那如何去修改控件的状态呢?方法很简单➢ 每一个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.sizetransform属性
利用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, CGFloatty);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; (空色)