一.概述
程序运行过程中,我们经常要改变控件的显示状态,如下载进度、播放器的播放进度、图片的放大缩小等,那么如何修改呢?
二. 修改UI控件的状态
每个UI控件都是一个对象,要修改这个对象的状态就是要修改这个对象的属性,比如,修改UILabel显示的文字就修改UILabel的text属性
@interface UILabel : UIView <NSCoding> @property(nonatomic,copy) NSString *text; // default is nil @end
修改按钮的背景图片就修改UIButton的 imageView 属性
1 @interface UIButton : UIControl <NSCoding> 2 @property(nonatomic,readonly,retain) UIImageView *imageView NS_AVAILABLE_IOS(3_0); 3 ... 4 @end
由此可见,众多的UI控件都有一些自己的特定属性,但是有一些属性都是每个UI控件都具备的比如位置和尺寸,父控件子控件等所以将公共的属性提取到UIView中,所有的控件也都继承于UIView.
三. UIKit坐标系
在UIKit中,坐标系的原点(0,0)在左上角,x值向右正向延伸,y值向下正向延伸。
三.UIView的常见属性
1.获取自己的父控件对象.
@property(nonatomic,readonly) UIView *superview;
2.获取自己的子控件,子控件以数组形式存放,第一个添加的就是数组0.
@property(nonatomic,readonly,copy) NSArray *subviews;
NSLog(@"%ld个子控件\n",self.view.subviews.count);
结果为2 button2算做是绿色控件的的子控件.
3.控件的id\标识父控件可通过tag来区分,可在右侧赋值。
@property(nonatomic,readonly,copy) NSArray *subviews;
tag的使用:
- (IBAction)click:(UIButton *)but { NSLog(@"按钮被点击了\n"); if(but.tag ==12) { NSLog(@"上面的按钮被点击了\n"); } else if(but.tag == 31) { NSLog(@"下面的按钮被点击了\n"); } NSLog(@"%ld\n",but.tag); }
4.控件的形变属性(可以设置旋转角度、比例缩放等属性)
@property(nonatomic) CGAffineTransform transform;
1》 表示控件的形变状态(旋转角度、缩放比例等)
2》 创建CGAffineTransform类型数据的函数
此属性需要CGAffineTransform类型数据,创建此类型数据的常用函数
// 创建一个x,y方向的伸缩比例为sx和sy的形变值 CGAffineTransform CGAffineTransformMakeScale(CGFloat sx, CGFloat sy) // 在原形变值t的基础上再次进行x,y方向的伸缩比例为sx和sy的形变 CGAffineTransform CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy) // 创建旋转角度为angle的形变值 CGAffineTransformMakeRotation(CGFloat angle) // 在原形变值t的基础上在进行angle角度的旋转 CGAffineTransformRotate(CGAffineTransform t, CGFloat angle);
清空之前多有的形变属性
_btn.transform = CGAffineTransformIdentity;
5.控件的位置和尺寸(以父控件的左上角为坐标原点),自己左上角的坐标
@property(nonatomic) CGRect frame;
6.控件中点的位置(以父控件的左上角为坐标原点)
@property(nonatomic) CGPoint center;
7.控件所在矩形框的位置和尺寸(以自己左上角为坐标原点,所以bounds的x\y一般为0)
@property(nonatomic) CGRect bounds;
五. UIView的常见方法
1.添加一个子控件view
- (void)addSubview:(UIView *)view;
2. 从父控件中移除
- (void)removeFromSuperview;
3.根据一个tag标识找出对应的控件(一般都是子控件)
- (UIView *)viewWithTag:(NSInteger)tag;