首先了解一下这些改变位置的属性的作用域
frame :位置\尺寸
bound : 尺寸
center :位置
transform : 位置\尺寸\旋转角度
了解一下三种形式的改变:
CGAffineTransformMakeTranslation平移(水平,垂直)100是往上走100的意思,括号里是往什么方向走多少的意思,而不是指控位置!
CGAffineTransformMakeScale 按比例缩放
CGAffineTransformMakeRotation 按弧度旋转
1.首先拖出一个控件并对其属性进行操作
取得一个未声明按钮,拿到storyboard里面的一个控件这个按钮没有声明只是在storyboard中拖出来设置了
取得一个未声明按钮,拿到storyboard里面的一个控件这个按钮没有声明只是在storyboard中拖出来设置了
[self.view viewWithTag:10];在按钮的tag属性设置10之后,针对所有的UIView搜索这个tag
因为要照顾所有的控件 所以返回的是一个UIView,所以我们要的是一个button的话 父类变子类就要强制类型转换
UIButton *head = (UIButton *)[self.view viewWithTag:10];
这个方法必须是
self
.
view
的子控件,子控件的子控件也可以 一层一层往下找
这个方法的缺点 tag 一样的时候,只返回一个控件,看优先级,先找到谁先返回谁 优先级按添加控件的顺序
2.按钮移动
每次向上移动100的距离
head.transform = CGAffineTransformMakeTranslation(0, -100);这句话真正实现的时候只移动了一次 为什么呢,下面将做出解释。
transform形变属性只允许有一种状态,这个状态指的是最初的状态 就是第一次的状态来说去做改变,所以第二次点击就没有反应了
所以我们要有个东西 来改变这个初始状态
CGAffineTransformTranslate在head.transform的基础上产生的一个新的transform
head.transform = CGAffineTransformTranslate(head.transform, 0, -100);这句话才能每次都对位置做出累加的改变
3.Tansform 旋转,缩放
Tansform 旋转
向左旋转45度
弧度制而不是角度制
系统提供了一个宏给我们 M_PI_4
角度是正数:顺时针,角度是负数:逆时针
与刚刚的平移同理:
旋转
head.transform = CGAffineTransformMakeRotation(-M_PI_4);
角度只能在原来的正的基础上转45度
head.transform = CGAffineTransformRotate(head.transform, M_PI_4);
角度在转过的基础上转
这里要强调一下,Transform的向上是针对最上面那条线向上移动,上下左右都是一样的,所以比如你选择了45度之后再向上,那控件就会斜着走,所以如果你在旋转过角度的情况下还想向上走,就考虑用frame来改变位置
Transform的缩放(按比例)
Head.transform=CGAffineTransformMakeScale(x方向的缩放,y方向的缩放);
head.transform = CGAffineTransformMakeScale(1.5, 1.5);只相对于初始位置做一次
可不断放大
head.transform = CGAffineTransformScale(head.transform, 1.5, 1.5);
放大>1 缩小<1