10--通过代码创建按钮
1. tag 和transform 属性的使用: 实现图片的平移和旋转
2.代码创建按钮
三个结构体:CGPoint、CGSize、CGRect
CGPoint 结构体 包含X 和Y 值
/* Points. */
struct CGPoint {
CGFloat x;
CGFloat y;
};
typedef struct CGPoint CGPoint;
CGSize 同理系统默认的一个结构体 包含属性的宽度和高度值
/* Sizes. */
struct CGSize {
CGFloat width;
CGFloat height;
};
typedef struct CGSize CGSize;
CGRect
/* Rectangles. */
struct CGRect {
CGPoint origin;//偏移是相对父窗口的
CGSize size;
};
typedef struct CGRect CGRect;
这三个结构体均在一个头文件里:CGGeometry.h
几个常见的方法:
1.CGRectMake
btn.frame = CGRectMake(50, 50, 100, 100); //通过CGRectMake创建一个框
CG_INLINE CGRect
CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height)
{
CGRect rect;
rect.origin.x = x; rect.origin.y = y;
rect.size.width = width; rect.size.height = height;
return rect;
}
没 错,这个方法就是make一个rect,定好origin(起点,左上角),宽与高,就可以画出一个位置与大小确定的rect(矩形)这个函数被声明为内 联函数,一是因为它比较小,二是因为在画界面时我们要求一定的效率。这个函数还是藏在刚刚那个头文件里面:CGGeometry.h
2.以代码的方式实现
1 // 2 // ViewController.m 3 // 03- 通过代码创建按钮 4 // 5 // Created by Stephen on 16/4/12. 6 // Copyright © 2016年 Stephen. All rights reserved. 7 // 8 9 #import "ViewController.h" 10 11 @interface ViewController () 12 13 @end 14 15 @implementation ViewController 16 17 // 通过代码来创建按钮 18 - (void)viewDidLoad { 19 [super viewDidLoad]; 20 21 //1. 创建按钮对象并初始化 22 UIButton *btn = [[UIButton alloc] init]; 23 24 //2.添加按钮 25 [self.view addSubview:btn]; 26 27 //3.设置frame 显示对应的边框 目的就是将按钮显示出来 28 29 30 //4.设置背景图片 31 //4.1 通过文件名加载图片 默认是pNG格式 32 UIImage *image = [UIImage imageNamed:@"btn_01"]; 33 //4.2设置普通状态下的背景图片 34 [btn setBackgroundImage:image forState:UIControlStateNormal]; 35 36 //4.3设置高亮状态下的背景图片 37 UIImage * high = [UIImage imageNamed:@"btn_02"]; 38 [btn setBackgroundImage:high forState:UIControlStateHighlighted]; 39 //5. 设置文字 40 [btn setTitle:@"点我啊" forState:UIControlStateNormal]; 41 [btn setTitle:@"摸我干啥" forState:UIControlStateHighlighted]; 42 43 //6.设置文件颜色 44 [btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; 45 [btn setTitleColor:[UIColor blueColor] forState:UIControlStateHighlighted]; 46 47 //7.监听按钮点击 48 [btn addTarget:self action:@selector(btnClick) forControlEvents:UIControlEventTouchUpInside]; 49 50 } 51
52 - (void)btnClick 53 54 { 55 NSLog(@"-======="); 56 } 57 58 59 @end
在iOS中有一个UIControl类,该类中定义了一个(作用于监听事件)
-(void)addTarget:(id)target action:(SEL) forControlEvents:(UIControlEvents)control
方法,大部分视图类都继承自UIControl类,所以"炒菜"按钮可以使用该方法实现Target-action模式。在iOS中这种设计模式被称作一个对象给另外一个对象发送消息。
- (void)viewDidLoad{ [super viewDidLoad]; // 给炒菜按钮添加点击事件 // 使用Target-action设计模式,在两个对象间直接发送消息
[self.btnCooking addTarget:self action:@selector(pressCooking:) forControlEvents:UIControlEventTouchUpInside];}
1、self 指目标对象为当前对象,及ViewController;
2、action 即 在目标对象上的点击方法, 将对应的点击方法封装成sel 类型的方法
3、何时调用该方法,UIControlEventTouchUpInside即单击时。
“炒菜”按钮是一个可交互的视图控件,点击它后,它指定了一个target(目标对象),并执行目标对象上指定的action(方法)。
action方法有以下几种形式:
- (void)doSomething;// OR- (void)doSomething:(id)sender;// OR- (IBAction)doSomething:(id)sender;// OR- (IBAction)doSomething:(UIButton *) sender;
这里的sender,发送者,就是对 “菜单” 按钮对象的引用。
以下代码是完全用代码定义的一个UIButton,并添加在self.view中:
- (void)viewDidLoad{ [super viewDidLoad]; // 实例化按钮,并设置按钮类型为圆角
UIButton *btnCustom = [UIButton buttonWithType:UIButtonTypeRoundedRect]; // 设置按钮大小
btnCustom.frame = CGRectMake(124, 140, 73, 44); // 设置按钮标题
[btnCustom setTitle:@"点击我..." forState:UIControlStateNormal]; // 设置按钮点击事件
[btnCustom addTarget:self action:@selector(customButton) forControlEvents:UIControlEventTouchUpInside]; // 将按钮添加到View
[self.view addSubview:btnCustom];}/** 自定义按钮点击方法 */
- (void)customButton{ [self.lblDish setText:self.txtMaterial.text];}
UIButton的几种触发方式:
1、UIControlEventTouchDown
指鼠标左键按下(注:只是“按下”)的动作
2、UIControlEventTouchDownRepeat
指鼠标左键连续多次重复按下(注:只是“按下”)的动作,比如,鼠标连续双击、三击、……、多次连击。
说明:多次重复按下时,事件序列是这样的:
UIControlEventTouchDown ->
(UIControlEventTouchUpInside) ->
UIControlEventTouchDown ->
UIControlEventTouchDownRepeat ->
(UIControlEventTouchUpInside) ->
UIControlEventTouchDown ->
UIControlEventTouchDownRepeat ->
(UIControlEventTouchUpInside) ->
......
除了第一次按下外,后面每次摁下都是一个UIControlEventTouchDown事件,然后紧跟一个UIControlEventTouchDownRepeat事件。
3、UIControlEventTouchDragInside
指按下鼠标,然后在控件边界范围内拖动。
4、UIControlEventTouchDragOutside
与UIControlEventTouchDragInside不同的是,拖动时,鼠标位于控件边界范围之外。
但首先得有个UIControlEventTouchDown事件,然后接一个UIControlEventTouchDragInside事件,再接 一个UIControlEventTouchDragExit事件,这时,鼠标已经位于控件外了,继续拖动就是 UIControlEventTouchDragOutside事件了。
具体操作是:在控件里面按下鼠标,然后拖动到控件之外。
5、UIControlEventTouchDragEnter
指拖动动作中,从控件边界外到内时产生的事件。
6、UIControlEventTouchDragExit
指拖动动作中,从控件边界内到外时产生的事件。
7、UIControlEventTouchUpInside
指鼠标在控件范围内抬起,前提先得按下,即UIControlEventTouchDown或UIControlEventTouchDownRepeat事件。
8、UIControlEventTouchUpOutside
指鼠标在控件边界范围外抬起,前提先得按下,然后拖动到控件外,即
UIControlEventTouchDown ->
UIControlEventTouchDragInside(n 个) ->
UIControlEventTouchDragExit ->
UIControlEventTouchDragOutside(n 个)
时间序列,再然后就是抬起鼠标,产生UIControlEventTouchUpOutside事件。