一、按钮的基本使用
frame 相当于父控件的左上角
需求:上下左右移动带背景图片的按钮,增大和见下带背景图片的按钮
分析
1)要定义一个按钮
2)定义上下左右 用frame.origin.x/y,变大,变小的方法frame.size.height/width
知识
定义按钮
1)连线属性 IBOutlet 2)按钮类名 UIButton
定义方法
1)方法类型 IBAction
方法实现
1)利用按钮的frame属性,frame 是CGRect 类型的
由CGPoint的origin和CGSize的size
2)不能直接给对象点出的的结构体属性的成员赋值
3)可以给独立的结构体属性成员赋值
所以,若要通过frame属性来移动button
1)创建一个CGRect的类型来保存获取到按钮frame
2)对这个新创建的类型变量赋值
3)将这个类型变量再次赋给按钮frame属性
二、知识重点
UIView的常见属性
@property(nonatomic,readonly) UIView *superview;
获得自己的父控件对象
@property(nonatomic,readonly,copy) NSArray *subviews;
获得自己的所有子控件对象
@property(nonatomic) NSInteger tag;
控件的ID\标识,父控件可以通过tag来找到对应的子控件
@property(nonatomic) CGAffineTransform transform;
控件的形变属性(可以设置旋转角度、比例缩放、平移等属性)
UIView的常见属性
@property(nonatomic) CGRect frame;(缩放,位置移动)
控件所在矩形框在父控件中的位置和尺寸(以父控件的左上角为坐标原点)
@property(nonatomic) CGRect bounds;(缩放)
控件所在矩形框的位置和尺寸(以自己左上角为坐标原点,所以bounds的x\y一般为0)
@property(nonatomic) CGPoint center;(位置移动)
控件中点的位置(以父控件的左上角为坐标原点)
UIKit坐标系
在UIKit中,坐标系的原点(0,0)在左上角,x值向右正向延伸,y值向下正向延伸
UIView的常见方法
- (void)addSubview:(UIView *)view;
添加一个子控件view
(void)removeFromSuperview;
从父控件中移除(UIView *)viewWithTag:(NSInteger)tag;
根据一个tag标识找出对应的控件(一般都是子控件)
三、要掌握的
1)使用代码创建、添加控件
2)分别通过 storyboard 和 代码 设置按钮在不同状态的背景、文字、文字颜色
3)分别通过 storyboard 和 代码 监听按钮点击
4)修改控件的位置和尺寸
5)制作简单的动画效果
6)掌握frame、center、bounds、transform的使用
四、方法提取·左移定义的值
背景:利用frame完成按钮移动
特别之处:一个方法A控制上下左右移动,然后用不同方向的监听事件调用这个方法
问题:让这个方法A知道具体方向
解决:不同事件方法向这个方法A传入一个方向枚举类型用来判断
实施:定义个枚举类型
高明之处1:完成左上移动
改动之处:对枚举元素用左移定义的值,
typedef enum {
HMDirectionLeft = 1 << 0, // 0001
HMDirectionRight = 1 << 1, // 0010
HMDirectionUp = 1 << 2, // 0100
HMDirectionDown = 1 << 3 // 1000
} HMDirection;
然后在事件方法中 “左和上或一下”
[self moving:HMDirectionLeft|HMDirectionUp];
最后在方法A中判断的时候用 “或后的值与&每一个方向” 再进行处理移动
if (direction & HMDirectionLeft)
有效
if (direction & HMDirectionUp)
有效
if (direction & HMDirectionDown)
无效
if (direction & HMDirectionRight)
无效
原理:A|B&X=A|B(当X=A和X=B)
高明之处2:不同方向的监听事件合并为一个
问题:让这个方法A知道具体方向,但是现在只有一个方法
解决:设置每一个方向按钮的tag属性,让每个按钮链接该事件方法
原理:当点击某个按钮是,系统会把该触发按钮传入该事件方法,当然这个事件方法得按钮类型的参数用来接收到它,这样就可以得到当前按钮,即得到当前按钮的tag值,而tag值又可以枚举类型相同
实施:如上(改动之处)
注意:
1)用frame改变大小,要把Xcode里的 工具1面板的 Use Auto layout 勾选取消,否则失效
2)用bounds的位置一般为0,因为它始终以自己的左上角为坐标原点,所以用它来缩放控件
五、动画设置放在位置数据修改之后,重置位置之前
1)首尾式动画
// 1.开启动画
[UIView beginAnimations:nil context:nil];
// 2.设置执行动画的时间 (单位s)
[UIView setAnimationDuration:1];
// 修改头像center属性
self.headBtn.center = center;
// 提交动画
[UIView commitAnimations];
2)用block
// animate 动画 Duration 动画持续时间(s)
// 当遇到方法中需要使用block时候,直接敲一个回车(enter)
[UIView animateWithDuration:1 animations:^{
// 需要执行动画的代码
self.headBtn.center = center;
}];
2015年07月02日18:39:09
老师讲的QQ登录
1.QQ登陆思路
1.搭建界面
2.监听按钮的点击
1.监听按钮的点击事件方法有三种形式
1.不带参数
2.带一个参数,这个参数只能是触发这个事件的哪个控件(按钮)
3,带两个参数,第一个是触发这个事件的哪个控件,第二参数就是事件.
3.连线导致两个错误
1.连线后修改方法名称没有删除之前连线-> 找不方法的错误
2.连线后,修改属性名称,而没有删除之前的连线->setValue:forUndefinedKey
4.弹窗的两种方法
//第一种方式
// 在iOS9中被废弃
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@”提示” message:@”QQ不能为空!” delegate:nil cancelButtonTitle:@”确定” otherButtonTitles: nil];
// 让alertView显示出来
[alertView show];
//第二种方式:iOS8新增的
// 创建弹窗的控制器
UIAlertController *ac = [UIAlertController alertControllerWithTitle:@”提示” message:@”密码不能为空” preferredStyle:UIAlertControllerStyleAlert];
// 创建弹窗执行的行为
UIAlertAction *action = [UIAlertAction actionWithTitle:@”确定” style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action) {
// 点击按钮之后做事情的代码
NSLog(@”come here”);
}];
// 把行为添加到弹窗控制器上(弹窗会多出一个按钮)
[ac addAction:action];
// present 展示
[self presentViewController:ac animated:YES completion:nil];