首页 > 学院 > 开发设计 > 正文

IOS开发笔记-基础UI(4)按钮的使用(transform属性)和学习案例

2019-11-14 19:30:04
字体:
来源:转载
供稿:网友
利用transform属性可以修改控件的位移(位置)、缩放、旋转。经常用在动画里,比如旋转角度,动画缩放,平移等
 
先学几个 xcode 开发的小技巧:
故事板的viewcontroll,可以直接拖拽复制,且不同项目里的图片素材也可以相互拖拽复制使用,但是图片的拖拽复制要按option 健进行,否则就是剪切了。那么我们在开发到类似的一些项目的时候,不用每次都重写弄界面,那么可以直接拖拽拷贝故事板,图片拖拽要按住 option 键同时拽到 images.xcassets 目录下即可正常显式,且拖拽到新的项目中的故事板,默认是 autolayout 的,还要注意原来的连线!最好彻底退出模拟器和 xcode,再重新打开。
 
在开发中,如果需要对控件位置,大小,旋转进行改变,最好使用 transform,可以省去很大的麻烦,比如在遇到 autolayout 的时候,frame 就不行,但是 transform 可以改变,且 transform属性修改控件的位置,大小,旋转,不需要计算形变之后的结果,它是一个相对自己的累加过程,不需要知道初试的位置和结束的位置,简化了很多的计算量。
 
遇到新的属性和方法,学会查看头文件
创建一个transform属性
CGAffineTransform CGAffineTransformMakeTranslation(CGFloat tx,  CGFloat ty) ;
AffineTransform类表示 2D 仿射变换,它执行从 2D 坐标到其他 2D 坐标的线性映射
MakeTranslation(名词的 translation)作用是:基于对象的初始的位置做的形变!不是累加的形变。如:
- (IBAction)move:(UIButton *)button{    self.headImage.transform = CGAffineTransformMakeTranslation(0, -100);}

点击方向键,只向上移动100之后不再变化,点击多次,只是第一次的时候y变化-100。
如图所示

CGAffineTransform CGAffineTransformMakeScale(CGFloat sx, CGFloat sy);

形变,缩放功能,sx,和 sy 分别管理的横向和竖向的缩放,也就是拉长,还是拉宽的管理,且1.0不变化,小玉1.0小,大于1.0变大。

CGAffineTransform CGAffineTransformMakeRotation(CGFloat angle)

名词的 rotation,就要家 make,做变化,苹果和体贴的设计。同理,这样的设置,只变化一次。累计变化需要三个参数的动词方法。

(注意:angle是弧度制,也就是π,并不是角度制,且类似缩放,弧度是正数是顺时针旋转,负数是逆时针旋转)

 在某个transform的基础上进行叠加(可以对上述方法进行改变,变成累加的)

CGAffineTransform CGAffineTransformTranslate(CGAffineTransform t, CGFloat tx, CGFloat ty);

动词的 translate,不用带 make, 多一个参数,下面的也是如此。

作用是在某个 transform参数的基础之上做的形变,实际效果就是一个位移的累加过程。

CGAffineTransform CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy);

此时也多了第一个 参数,少了 make,直接做动词。那么就是可以一直变化,不再是相对初试对象位置的改变。

CGAffineTransform CGAffineTransformRotate(CGAffineTransform t, CGFloat angle);

同理,rotate 是动词,去掉 make,那么后面肯定多了一个参数,相对某个 transform 参数的基础来变。

清空之前设置的transform属性
view.transform = CGAffineTransformIdentity;
熟悉苹果开发的规律!以及一些命名原则和方法的参数设置的习惯。
- (IBAction)zoom:(UIButton *)button {    //加上首尾式动画    [UIView beginAnimations:nil context:nil];    [UIView setAnimationDuration:2.0];    //缩小按钮    if (0 == button.tag) {        self.headImage.transform = CGAffineTransformScale(self.headImage.transform, 0.5, 0.5);    }    else    {        //放大按钮        self.headImage.transform = CGAffineTransformScale(self.headImage.transform, 1.5, 1.5);    }        [UIView commitAnimations];}- (IBAction)rotate:(UIButton *)button {    [UIView beginAnimations:nil context:nil];    [UIView setAnimationDuration:2.0];    //顺时针180度,右旋转按钮    if (1 == button.tag) {       self.headImage.transform = CGAffineTransformRotate(self.headImage.transform, M_PI_2);    }    else    {        //逆时针180度,左旋转按钮        self.headImage.transform = CGAffineTransformRotate(self.headImage.transform, -M_PI_2);    }        [UIView commitAnimations];}

 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表