一、 UIView的常见属性
1. superview
- @property(nonatomic,readonly) UIView *superview;
- 获得自己的父控件对象
2. subviews
- @property(nonatomic,readonly,copy) NSArray *subviews;
- 获得自己的所有子控件对象
3. tag
- @property(nonatomic) NSInteger tag;
- 控件的ID标识,父控件可以通过tag来找到对应的子控件
4. frame
- @property(nonatomic) CGRect frame;
- 控件所在矩形框的位置和尺寸(以父控件的左上角为坐标原点)
5. bounds
- @property(nonatomic) CGRect bounds;
- 控件所在矩形框的位置和尺寸(以自己左上角为坐标原点,所以bounds的xy永远为0)
6. center
- @property(nonatomic) CGPoint center;
- 控件中点的位置(以父控件的左上角为坐标原点)
7. transform
- @property(nonatomic) CGAffineTransform transform;
- 控件的形变属性(可以设置旋转角度、比例缩放、平移等属性)
二、 以UIButton为例
0. 初始化
- 最普通的初始化方法
UIButton *btn = [[UIButton alloc] initWithFrame:rect];
- 快速初始化
UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
• 提示:在OC开发中,实例化任何类型的非自定义对象,都请首先尝试一下是否存在快速定义方法。如果存在快速定义方法,就尽量不要使用init之类的方法实例化对象!
type参数用来指定按钮的类型,一共有6种选择:
UIButtonTypeCustom:无类型,按钮的内容需要自定义
UIButtonTypeRoundedRect:圆角矩形按钮
UIButtonTypeDetailDisclosure:显示明细按钮
UIButtonTypeInfoLight:亮色信息按钮,用于深色背景
UIButtonTypeInfoDark:深色信息按钮,用于浅色背景
UIButtonTypeContactAdd:添加按钮
• 说明:
–前两种类型的按钮最常用
–后四种类型的按钮设计,是为了保持用户统一的使用习惯
1. 设置文字
- 设置按钮在默认状态下显示的文字(第2个state参数用来指定按钮的状态)
[btn setTitle:@"love" forState:UIControlStateNormal];
- 设置按钮在长按状态下显示的文字
[btn setTitle:@"whblovelap" forState:UIControlStateHighlighted];
2. 设置文字颜色
- 设置按钮在默认状态下的文字颜色为红色
[btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
ps:修改第2个参数就可以设置其他状态下的文字颜色
3. 设置字体
- 先初始化字体对象,再设置字体
// 使用系统自带的字体 UIFont *font = [UIFont systemFontOfSize:16]; // 设置字体 btn.titleLabel.font = font; // 也可以使用其他字体 UIFont *font = [UIFont fontWithName:@"Marker Felt" size:16];
4. 设置背景颜色
- 设置背景颜色为橙色
[btn setBackgroundColor:[UIColor orangeColor]];
5. 设置背景图片
- 先加载图片,再设置图片
// 加载图片 UIImage *image = [UIImage imageNamed:@"whblap.png"]; // 设置按钮背景图像 [btn setBackgroundImage:image forState:UIControlStateNormal];
// 设置按钮图像
[btn setImage:image forState:UIControlStateNormal];
•注意
–背景图像会根据按钮的尺寸拉伸
–按钮图像会居中显示在按钮中央位置
–如果同时设置了按钮的图像和文字
•按钮区域足够大,会并列显示图像和文字
•如果区域不够大,优先显示图像
ps:修改第2个参数就可以设置其他状态下的背景图片
6. 添加监听器
[btn addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside];
- 最后一个参数用来指定事件类型,这里传入的是单击事件
- 按钮被单击后,就会调用self的click:方法,并且将按钮作为方法的第一个参数传入
- (void) click:(UIButton *)btn { }
三、 示例
- 如下所示:通过点按按钮对中间那个图片按钮实现 上移、下移、左移、右移、左旋转、右旋转、放大、缩小 等功能
- 开发步骤
功能实现代码如下:
// // WHBLAPViewController.m // 03-按钮操作 // // Created by whblap on 14-5-26. // Copyright (c) 2014年 whblap. All rights reserved. // #import "WHBLAPViewController.h" // 设置位移像素点 #define displacement 10 // 设置旋转角度大小 // C++里面预编译处理 是这样写的 const int displacement = 10; @interface WHBLAPViewController () @end @implementation WHBLAPViewController - (void)btnClickWithBlock:(void (^)())block { // OC语法规定:不允许直接修改 某个对象中结构体属性的成员 // 设置动画开始 [UIView beginAnimations:nil context:nil]; // 设置动画时间 [UIView setAnimationDuration:0.5]; // 传进一段代码 block(); // 结束动画 [UIView commitAnimations]; } #pragma mark - 控制按钮上下左右走动 - (IBAction)butten:(id)sender { [self btnClickWithBlock:^{ CGRect tempFrame = _btn.frame; // 将_btn位置属性赋值给临时的tempFrame int tag = [sender tag]; // CGFloat displacement = 10; switch (tag) { case 1: tempFrame.origin.y -= displacement; break; case 2: tempFrame.origin.y += displacement; break; case 3: tempFrame.origin.x -= displacement; break; case 4: tempFrame.origin.x += displacement; break; default: break; } _btn.frame = tempFrame; }]; } - (IBAction)rotateAndZoom:(id)sender { [self btnClickWithBlock:^{ switch ([sender tag]) { case 5: _btn.transform = CGAffineTransformRotate(_btn.transform, -M_PI_4); //在原来比例——btn.transform下再放大 break; case 6: _btn.transform = CGAffineTransformRotate(_btn.transform, +M_PI_4); break; case 7: _btn.transform = CGAffineTransformScale(_btn.transform, 1.2, 1.2); break; case 8: _btn.transform = CGAffineTransformScale(_btn.transform, 0.8, 0.8); break; } }]; } @end
- 如下所示:利用代码创建图片按钮 在不同的State Config下显示不同的图片及文字状态
功能实现代码如下:
#import "WHBLAPViewController.h" @interface WHBLAPViewController () @end @implementation WHBLAPViewController #pragma mark 控制器的view加载完毕的时候会调用一次 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. // 1.创建按钮 // 1.1.创建 UIButton *btn = [[UIButton alloc] init]; NSLog(@"viewdidload----%p", btn); // 1.2.设置按钮的尺寸和位置 btn.frame = CGRectMake(0, 0, 100, 100); // 1.3.设置按钮普通状态下的属性 // 1.3.1.设置背景图片 UIImage *normal = [UIImage imageNamed:@"btn_01.png"]; [btn setBackgroundImage:normal forState:UIControlStateNormal]; // 1.3.2.设置文字 [btn setTitle:@"点我啊" forState:UIControlStateNormal]; // 1.3.3.设置文字颜色 [btn setTitleColor:[UIColor greenColor] forState:UIControlStateNormal]; // 1.4.设置按钮高亮状态下的属性 // 1.4.1.设置背景图片 UIImage *high = [UIImage imageNamed:@"btn_02.png"]; [btn setBackgroundImage:high forState:UIControlStateHighlighted]; // 1.4.2.设置文字 [btn setTitle:@"摸我干啥" forState:UIControlStateHighlighted]; // 1.4.3.设置文字颜色 [btn setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted]; // 1.5.监听按钮点击 [btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside]; // 2.添加按钮到控制器的view中 [self.view addSubview:btn]; // 3.添加文本输入框 UITextField *field = [[UITextField alloc] init]; field.frame = CGRectMake(100, 100, 100, 50); field.backgroundColor = [UIColor redColor]; // 中点的x CGFloat centerX = self.view.frame.size.width * 0.5; CGFloat centerY = self.view.frame.size.height * 0.5; field.center = CGPointMake(centerX, centerY); // 设置字体 field.font = [UIFont systemFontOfSize:30]; // [field setBackgroundColor:<#(UIColor *)#>] [self.view addSubview:field]; } #pragma mark 监听按钮点击 - (void)btnClick:(UIButton *)btn { } @end