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 。

你可能感兴趣的:(IOS UI-Button按钮)