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

     

     

     

  • 相关阅读:
    多种方式安装GitLabRunner
    rpm,docker,k8s三种方式安装部署GitLab服务
    利用curl命令访问Kubernetes API server
    在客户端电脑使用 kubectl 远程管理 Kubernetes
    利用 Nginx 反向代理搭建本地 yum 服务器
    Jenkins和Gitlab CI/CD自动更新k8s中pod使用的镜像说明
    1.在 Kubernetes 在快速安装 Harbor
    4.Gitlab CI 与 Kubernetes 的结合
    3.在 Kubernetes 上安装 Gitlab CI Runner
    2. 在 Kubernetes 上安装 Gitlab
  • 原文地址:https://www.cnblogs.com/stephenmc/p/5379214.html
Copyright © 2011-2022 走看看