• IOS UI-Button按钮


     1 #import "ViewController.h"
     2 
     3 @interface ViewController ()
     4 {
     5     UILabel *lable;
     6     BOOL moveFlag;
     7     NSInteger length;
     8     UIButton *btn;
     9     NSTimer *timer;
    10 }
    11 
    12 @end
    13 
    14 @implementation ViewController
    15 
    16 - (void)viewDidLoad {
    17     [super viewDidLoad];
    18     moveFlag = NO;
    19     length = 10;
    20     
    21     self.view.backgroundColor = [UIColor darkGrayColor];
    22     lable = [[UILabel alloc] init];
    23     lable.frame = CGRectMake(50, 100, 280, 50);
    24     lable.text = @"点我啊";
    25     lable.backgroundColor = [UIColor whiteColor];
    26     [self.view addSubview:lable];
    27     
    28     // 按钮UIButton
    29     btn = [UIButton buttonWithType:UIButtonTypeCustom];
    30     // 设置按钮坐标、大小
    31     btn.frame = CGRectMake(170, 250, 50, 50);
    32     // 设置背景图
    33     [btn setImage:[UIImage imageNamed:@"fire_down.png"] forState:UIControlStateNormal];
    34     [btn setImage:[UIImage imageNamed:@"blue_down.png"] forState:UIControlStateHighlighted];
    35 
    36     
    37     // 设置标题(状态标题)
    38 //    [btn setTitle:@"开始" forState:UIControlStateNormal];
    39 //    [btn setTitle:@"按下" forState:UIControlStateHighlighted];
    40     
    41     // 给按钮添加 [关联事件]
    42     [btn addTarget:self action:@selector(touchMe) forControlEvents:UIControlEventTouchUpInside];
    43     // 添加背景色
    44     [btn setBackgroundColor:[UIColor cyanColor]];
    45     
    46     // 按钮变圆
    47     btn.layer.cornerRadius = 20;
    48     // 添加按钮到视图上
    49     [self.view addSubview:btn];
    50 
    51 }
    52 
    53 -(void) touchMe
    54 {
    55     //判断完了小球动没有动
    56     if (moveFlag ==NO) {
    57         moveFlag = YES;
    58     }
    59     else
    60         moveFlag = NO;
    61     
    62     //当小球没有动得时候,点小球-变动
    63     if (moveFlag) {
    64         timer = [NSTimer timerWithTimeInterval:0.1 target:self selector:@selector(bollMove) userInfo:nil repeats:YES];
    65         [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
    66     }
    67     else
    68         [timer invalidate];
    69     //当小球动得时候,点小球-不动
    70     
    71 }
    72 
    73 -(void) bollMove
    74 {
    75     
    76     if (btn.frame.origin.y>600) {
    77         length = -10;
    78 
    79     }
    80     else if (btn.frame.origin.y<0)
    81     {
    82         length = 10;
    83     }
    84     
    85     CGRect rect = btn.frame;
    86     rect.origin.y += length;
    87     btn.frame = rect;
    88 
    89 }

    一、手写控件

    1.手写控件的步骤
    (1)使用相应的控件类创建控件对象
    (2)设置该控件的各种属性
    (3)添加控件到视图中
    (4)如果是button等控件,还需考虑控件的单击事件等
    (5)注意:View Contollor和view的关系
    2.注意点

    在OC开发中,Storyboard中的所有操作都可以通过代码实现,程序员一定要熟练掌握代码布局界面的能力!

    设置控件监听方法的示例代码如下:

    [btn addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside];

    提示:

    1> addTarget方法定义在UIControl类中,这意味着可以给所有继承自UIControl类的对象添加监听方法

    2> 监听方法的第一个参数就是对象本身

    3> 监听方法的第二个参数是监听控件的事件

    二、frame,center和bounds属性

    1.frame、center和bounds属性
    frame:控制位置和大小
    center:控制位置(中心点)
    bounds:控制大小(以自己的左上角为原点)
    2.注意点

    (1)通过以下属性可以修改控件的位置

    frame.origin

    center

    (2)通过以下属性可以修改控件的尺寸

    frame.size

    bounds.size

    三、简单的动画效果

    简单介绍首尾式动画效果
    (1)开始动画
    (2)设置动画相关的时间等
    (3)参与动画的行动
    (4)提交动画
    注:实现代码参考下面的代码

    // beginAnimations表示此后的代码要“参与到”动画中

    [UIView beginAnimations:nil context:nil];

    // setAnimationDuration用来指定动画持续时间

    [UIView setAnimationDuration:2.0];

    self.headImageView.bounds = rect;

    ......

    // commitAnimations,将beginAnimation之后的所有动画提交并生成动画

    [UIView commitAnimations];

    四、补充笔记

    1. IBAction的参数

    - (IBAction)left:(UIButton *)button

    (1) 在OC中,绝大多数的控件监听方法的第一个参数就是控件本身

    (2) 默认连线时的参数类型是id

    (3) 如果要在监听方法中,方便控件的使用,可以在连线时或者连线后,修改监听方法的参数类型

    2. 修改对象的结构体成员

    在OC中,不允许直接修改“对象”的“结构体属性”的“成员”,但是允许修改“对象”的“结构体属性”

    修改结构体属性的成员方法如下:

    (1)使用临时变量记录对象的结构体属性

    (2) 修改临时变量的属性

    (3)将临时变量重新设置给对象的结构体属性

    3. 在程序开发中需要避免出现魔法数字(Magic Number)

    使用枚举类型,可以避免在程序中出现魔法数字

    (1)枚举类型实质上就是一个整数,其作用就是用来替代魔法数字

    (2)枚举类型中,指定了第一个整数之后,后面的数字会递增

    五、transform

    1. transform属性

    在OC中,通过transform属性可以修改对象的平移、缩放比例和旋转角度

    常用的创建transform结构体方法分两大类

    (1) 创建“基于控件初始位置”的形变

    CGAffineTransformMakeTranslation(平移)

    CGAffineTransformMakeScale(缩放)

    CGAffineTransformMakeRotation(旋转)

    (2) 创建“基于transform参数”的形变

    CGAffineTransformTranslate

    CGAffineTransformScale

    CGAffineTransformRotate

    CGAffineTransformIdentity 回到原来位置

    补充:

    在OC中,所有跟角度相关的数值,都是弧度值,180° = M_PI

    正数表示顺时针旋转

    负数表示逆时针旋转

    提示:由于transform属性可以基于控件的上一次的状态进行叠加形变,例如,先旋转再平移。因此在实际动画开发中,当涉及位置、尺寸形变效果时,大多修改控件的transform属性,而不是frame、bounds、center 。

  • 相关阅读:
    202012-2 期末预测之最佳阈值
    [蓝桥杯][2017年第八届真题]k倍区间
    116. 飞行员兄弟
    P1985 [USACO07OPEN]翻转棋 Fliptile S
    P2882 [USACO07MAR]Face The Right Way G
    730. 机器人跳跃问题
    202012-1 期末预测之安全指数
    SpringMVC 的 JDBC 做 增删改查后 一些总结
    22. VUE 的 V-model 修饰符
    21. VUE 的 V-model 指令(双向绑定input)【主要绑定表单】
  • 原文地址:https://www.cnblogs.com/oc-bowen/p/5076721.html
Copyright © 2020-2023  润新知