学习CGAffineTransform和CATransform3D
2015-10-09 11:33
435 查看
在公司闲得无聊,就学习一些新的东西。不吸收一些新的知识,必然会被社会淘汰。而自己光看不记得话,总是走神,所以把自己学习的东西记录下来,留给以后查看。今天学习一下CATransform3D和CGAffineTransform. CGAffineTransform是作用于View的主要为2D变换,CATransform3D主要作用于layer,为3D变换使用,这两种变化可以转换。
//旋转 -(IBAction)doRotate:(id)sender { //当你改变过一个view.transform属性或者view.layer.transform的时候需要恢复默认状态的话,要先将它们重置,如下代码 transformItem.transform = CGAffineTransformIdentity; //锚点的默认值是(0.5,0.5),也就是anchorPoint默认在layer的中心点,旋转、平移、缩放都是根据锚点来的,iOS的坐标原点在左上角 transformItem.layer.anchorPoint = CGPointMake(1,0); //center属性是用CGPoint表示矩形中心点在其父视图的位置 transformItem.center = CGPointMake(CGRectGetWidth(transformItem.bounds),0.0) [UIView animateWithDuration:1 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ transformItem.transform = CGAffineTransformRotate(transformItem.transform,DEGREES_TO_RADIANS(-90)); } completion:^(Bool finished){ }]; } //缩放 -(IBAction)doScale:(id)sender { CGAffineTransform tr = CGAffineTransformScale(transformItem.transform,2,2); CGFloat h = transformItem.frame.size.height; [transformItem.layer setAnchorPoint:CGPointMake(0,1)]; [UIView animateWithDuration:1 delay:0 option:UIViewAnimationOptionCurveEaseOut animation:^{ transformItem.transform = tr; }completion:^(Bool finisher){ }]; } //位移 -(IBAction)doTranslate:(id)sender{ [UIView animationWithDuration:1 delay:0 option:UIViewAnimationOptionCurveEaseOut animation:^{ transformItem.transform = CGAffineTransformTranslate(transformItem.transform,100,0); }completion:^(Bool finished){ }];
CATransform3D
CATransform3D也是一个矩阵,多了一些切变和z轴的值,这里通过CABasicAnimation来实现
//旋转 -(CAAnimation *)animationRotate { CATransform3D rotationTransform = CAtransform3DMakeRotation(M_PI,0,1.0,0.0) CABasicAnimation *animation; animation = [CABasicAnimation animationWithKeyPath:@"transform"]; animation.toValue = [NSValue valueWithCATransform3D:rotationTransform]; animation.during = 1.5; animation.autoreverses =No; animation.cumulative =YES; animation.repeatCount =FLT_MAX; animation.beginTime=0.6 animation.delegate =self return animation } -(IBAction)do3dRotate:(id)sender{ CAAnimation *myAnimationRotate = [self animationRotate]; [transformItem.layer addAnimation:myAnimationRotate forkey:ANIM_ROTATE]; }
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- IOS 改变键盘颜色代码
- 举例详解iOS开发过程中的沙盒机制与文件
- Android和IOS的浏览器中检测是否安装某个客户端的方法
- javascript实现阻止iOS APP中的链接打开Safari浏览器
- IOS开发第三方语音-微信语音
- iOS开发之路--微博OAuth授权_取得用户授权的accessToken
- 基于UIControl控件实现ios点赞功能
- iOS开发中实现邮件和短信发送的简单示例