zoukankan      html  css  js  c++  java
  • 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事件。

     

     

     

  • 相关阅读:
    POJ 3041 Asteroids 最小点覆盖 == 二分图的最大匹配
    POJ 3083 Children of the Candy Corn bfs和dfs
    POJ 2049 Finding Nemo bfs 建图很难。。
    POJ 2513 Colored Sticks 字典树、并查集、欧拉通路
    POJ 1013 Counterfeit Dollar 集合上的位运算
    POJ 2965 The Pilots Brothers' refrigerator 位运算枚举
    无聊拿socket写的100以内的加法考试。。。
    POJ 1753 Flip Game
    初学socket,c语言写的简单局域网聊天
    汇编语言 复习 第十一章 标志寄存器
  • 原文地址:https://www.cnblogs.com/stephenmc/p/5379214.html
Copyright © 2011-2022 走看看