在IOS中,实现控件位置,大小变化的方式有很多,比如frame,bounds,center,transform等等,今天有空就整理了一下,这几种方式。
1.frame:UIView的框架,既可以改变控件的位置,也可以改变控件的大小;
2.bounds:顾名思义一般是用来改变空间的大小,值得注意的是虽然frame也可以改变控件的大小,但是两者的放大点却不一样,frame的放大点是UIView的左上角,而bounds则是以UI View的中心点进行放大。
3.center:它是CGPoint类型的,因此它只有一对x,y值,也就是说它只能改变控件的位置,而且同样的是以控件的中心点为基点的。
4.transform:它主要可以用来实现控件的一些变换,这些变换,包括了位移,旋转,缩放,放大等。
通过比较我们发现transform这个属性,可以几乎同时实现前三点所做到的事情,因此,我们就把这次的任务交给它啦!
首先还是搭建UI界面:
由图可知,我们总共需要一个UIImageView和八个UIButton,在.m文件中通过拖线的方式,声明好几个按钮的点击事件以及imageView:
@property (weak, nonatomic) IBOutlet UIImageView *head;
- (IBAction)down;
- (IBAction)up;
- (IBAction)leftRotate;
- (IBAction)max;
- (IBAction)min;
- (IBAction)rightRotate;
- (IBAction)left;
- (IBAction)right;
首先,实现图片向上移动的功能:
<p style="margin-top: 0px; margin-bottom: 0px; font-size: 11px; font-family: Menlo;">- (<span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2">IBAction</span>)up {</p><p style="margin-top: 0px; margin-bottom: 0px; font-size: 11px; font-family: Menlo; color: rgb(61, 29, 129);"><span style="font-variant-ligatures: no-common-ligatures; color: #000000"> </span><span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2">self</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000">.</span><span style="font-variant-ligatures: no-common-ligatures; color: #4f8187">head</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000">.</span><span style="font-variant-ligatures: no-common-ligatures; color: #703daa">transform</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000"> = </span>CGAffineTransformTranslate<span style="font-variant-ligatures: no-common-ligatures; color: #000000">(</span><span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2">self</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000">.</span><span style="font-variant-ligatures: no-common-ligatures; color: #4f8187">head</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000">.</span><span style="font-variant-ligatures: no-common-ligatures; color: #703daa">transform</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000">, </span><span style="font-variant-ligatures: no-common-ligatures; color: #272ad8">0</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000">, -</span><span style="font-variant-ligatures: no-common-ligatures; color: #272ad8">50</span><span style="font-variant-ligatures: no-common-ligatures; color: #000000">);</span></p><p style="margin-top: 0px; margin-bottom: 0px; font-size: 11px; font-family: Menlo;">}</p>
CGAffineTransformTranslate(self.head.transform,0, -50):第一个参数是获取需要改变的transform,第二,第三个参数就是将需要位移的具体值赋给transform,也就是坐标的改变量x,y。
那么以此类推,上下位移修改的是y值,那么左右位移修改的就是x的值了。
接下来是左右旋转(以左旋转为例):
- (IBAction)leftRotate {
self.head.transform = CGAffineTransformRotate(self.head.transform, M_PI_4);
}
CGAffineTransformRotate(self.head.transform,M_PI_4):与上一个方法类似,也是将第二个参数---旋转角度赋给transform。
最后是放大缩小:
- (IBAction)max {
self.head.transform = CGAffineTransformScale(self.head.transform, 1.5, 1.5);
}
CGAffineTransformScale(self.head.transform,1.5, 1.5):经过前两个方法的简介,相信这个方法大家都能懂了吧,就是将transform的大小变为原来的1.5倍。
Ok!就是这么简单,就可以实现图片的翻转腾挪了!