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事件。

 

 

 

原文地址:https://www.cnblogs.com/stephenmc/p/5379214.html