ios view的frame和bounds以及center, 手写控件
一.注意点
在OC开发中,Storyboard中的所有操作都可以通过代码实现,程序员一定要熟练掌握代码布局界面的能力!
提示:1> 按钮addTarget方法定义在UIControl类中,这意味着可以给所有继承自UIControl类的对象添加监听方方法
二. frame和bounds以及center属性
1.frame和bounds以及center属性
frame: 该view在父view坐标系统中的位置和大小。(参照点是,父亲的坐标系统)
bounds:该view在本地坐标系统中的位置和大小。(参照点是,本地坐标系统,就相当于ViewB自己的坐标系统,以0,0点为起点)
center:该view的中心点在父view坐标系统中的位置和大小。(参照是,父亲的坐标系统)
每个view都有一个本地坐标系统。这个坐标系统作用比较重要,比如触 摸的回调函数中的UITouch里面的>坐标值都是参照这个本地坐标
系统的坐标。当然bounds这个属性也是参照这个本地坐标系统来的。其实本地 坐标系统的关键就是要知道的它的原点(0,0)在什么位置
(这个位置又是相对于上层的view的本地坐标系统而言的,当然最上面的一层view就是 window它的本地坐标系统原点就是屏幕的左上角了)。
通过修改view的bounds属性可以修改本地坐标系统的原点位置。
所以,bounds影响到子view的位置和大小。如图解释:
2. 打印这个三个属性的值得方法
frame用法:
//获取yellowView的frame(坐标和大小)
CGRect yellowFrame = self.yellowView.frame;
//传入一个CGRect类型的数据,将它转换成一个字符串
NSString *frameStr = NSStringFromCGRect(yellowFrame);
//CGRect是由CGPoint和CGSize组成。
CGPoint origin = yellowFrame.origin;
CGSize size = yellowFrame.size;
center 和 bounds的用法:
//Center属性
CGPoint center = self.yellowView.center;
NSLog(@"%@",NSStringFromCGPoint(center));
//bounds属性。bounds的xy默认值是(0,0)
CGRect bounds = self.yellowView.bounds;
NSLog(@"bounds = %@",NSStringFromCGRect(bounds));
三.实现简单动画
1. 首尾式动画:
调用UIView的类方法 beginAnimations:nil context:nil
这里写需要动画的代码。
配置动画(时长)
提交动画。调用UIView的类方法 commitAnimations 单词:animation:动画,兴奋
伪代码:
[UIView beginAnimations:nil context:nil];
/** 需要执行动画的代码 **/
[UIView commitAnimations];
2. block动画
使用UIView的类方法
[UIView animateWithDuration:动画时长 animations:^{
//需要动画的代码
}];
伪代码:
[UIView animateWithDuration:0.5 animations:^{
/** 需要执行动画的代码 **/
}];
3.帧动画
//1 设置图片的动画数组
self.iconImage.animationImages = arrs;
//2 开始动画.先设置属性再开始动画
[self.iconImage setAnimationDuration:2];
[self.iconImage setAnimationRepeatCount:1]; //设置动画的重复次数
[self.iconImage startAnimating]; //开始执行动画
四.补充笔记:
1. 修改对象的结构体成员
在OC中,不允许直接修改“对象”的“结构体属性”的“成员”,但是允许修改“对象”的“结构体属性”
修改结构体属性的成员方法如下:
(1)使用临时变量记录对象的结构体属性
(2) 修改临时变量的属性
(3)将临时变量重新设置给对象的结构体属性
2. 在程序开发中需要避免出现魔法数字(Magic Number)
使用枚举类型,可以避免在程序中出现魔法数字
(1)枚举类型实质上就是一个整数,其作用就是用来替代魔法数字
(2)枚举类型中,指定了第一个整数之后,后面的数字会递增
3.代码实现:
这个不能赋值: CGFloat y = self.iconButton.frame.origin.y;
y -= 10;
self.iconButton //oc对象
self.iconButton.frame //OC对象的一个结构体属性 [注意到这里时可以赋值的]
self.iconButton.frame.origin 不能再进行赋值,语法规范
self.iconButton.frame.origin.y = y;
为什么呢:这个是语法规范规定的
这个方法可以赋值:
//1 获取头像按钮最原始的frame
CGRect originFrame = self.iconButton.frame;
//2 修改frame里的y值
originFrame.origin.y -= 10;
//3 把修改后的frame重新赋值给头像按钮
self.iconButton.frame = originFrame;
注意;center和bounds的坐标的修改和上面的一样。

浙公网安备 33010602011771号