使用CATransformLayer制作3D图像和动画
之前我们讲过可以用CALayer搭配CATransform3D来实现将View做3D旋转, 今天我们再看一个3D的新东西
CATransformLayer, 看名字就知道这个layer跟旋转有关, 那么具体是什么呢?
我们看他的头文件, 没有任何属性. 他其实是作为一个容器, 我们可以往里面添加其他的CALayer
比如我们要创建一个3D效果的立方体,

可以先创建一个CATransformlayer容器,
正方体的6个面我们以3D旋转后的Layer表示, 加入到容器中, 调整好每个面的角度和位置让他们拼接再一起就是一个正方体了
我们上代码吧
- (void)viewDidLoad {
    [super viewDidLoad];
    //create cube layer
    CATransformLayer *cube = [CATransformLayer layer];
    //add cube face 1
    CATransform3D ct = CATransform3DMakeTranslation(, , );
    [cube addSublayer:[self faceWithTransform:ct]];
    //add cube face 2
    ct = CATransform3DMakeTranslation(, , );
    ct = CATransform3DRotate(ct, M_PI_2, , , );
    [cube addSublayer:[self faceWithTransform:ct]];
    //add cube face 3
    ct = CATransform3DMakeTranslation(, -, );
    ct = CATransform3DRotate(ct, M_PI_2, , , );
    [cube addSublayer:[self faceWithTransform:ct]];
    //add cube face 4
    ct = CATransform3DMakeTranslation(, , );
    ct = CATransform3DRotate(ct, -M_PI_2, , , );
    [cube addSublayer:[self faceWithTransform:ct]];
    //add cube face 5
    ct = CATransform3DMakeTranslation(-, , );
    ct = CATransform3DRotate(ct, -M_PI_2, , , );
    [cube addSublayer:[self faceWithTransform:ct]];
    //add cube face 6
    ct = CATransform3DMakeTranslation(, , -);
    ct = CATransform3DRotate(ct, M_PI, , , );
    [cube addSublayer:[self faceWithTransform:ct]];
    //center the cube layer within the container
    CGSize containerSize = self.view.bounds.size;
    cube.position = CGPointMake(containerSize.width / 2.0, containerSize.height / 2.0);
    cube.transform = CATransform3DMakeRotation(, , , );
    [self.view.layer addSublayer:cube];
}
- (CALayer *)faceWithTransform:(CATransform3D)transform
{
    //create cube face layer
    CALayer *face = [CALayer layer];
    face.bounds = CGRectMake(, , , );
    //apply a random color
    CGFloat red = (rand() / (double)INT_MAX);
    CGFloat green = (rand() / (double)INT_MAX);
    CGFloat blue = (rand() / (double)INT_MAX);
    face.backgroundColor = [UIColor colorWithRed:red green:green blue:blue alpha:1.0].CGColor;
    face.transform = transform;
    return face;
}
@end
我们可以再给容器一个旋转动画, 就实现了一个旋转的立方体
CATransform3D transA = CATransform3DMakeRotation(, , , );
    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform"];
    animation.duration          = ;
    animation.autoreverses      = YES;
    animation.repeatCount       = ;
    animation.toValue           = [NSValue valueWithCATransform3D:transA];
    [cube addAnimation:animation forKey:nil];
使用CATransformLayer制作3D图像和动画的更多相关文章
- ZAM 3D 制作3D动画字幕 用于Xaml导出
		
原地址-> http://www.cnblogs.com/yk250/p/5662788.html 介绍:对经常使用Blend做动画的人来说,ZAM 3D 也很好上手,专业制作3D素材的XAML ...
 - Qt Creator中的3D绘图及动画教程(参照NeHe)
		
Qt Creator中的3D绘图及动画教程(参照NeHe) http://blog.csdn.net/cly116/article/details/47184729 刚刚学习了Qt Creator,发 ...
 - 纯CSS3超酷3D旋转立方体动画特效
		
简要教程 这是一款神奇的纯 CSS3 立方体动画特效插件.使用CSS3来制作动画效果已经成为WEB前端开发的一种时尚,从简单的颜色和尺寸动画,到复杂的旋转.翻转动画, CSS3 展现了它无穷的魅力.使 ...
 - 纯CSS实现3D图像轮转
		
CSS演武场今天继续,今天看一个纯css实现的3D图像轮转效果,请大家猛戳研究效果先,也可下载收藏先. 首先看html文件,div.billboard为效果的容器,利用10个div.poster分割图 ...
 - 张瀚荣:如何用UE4制作3D动作游戏
		
转自:http://www.gamelook.com.cn/2015/06/218267 GameLook报道/ 6月5日,2015年第三期GameLook开放日‧虚幻引擎专场活动在上海正式举行,此次 ...
 - Unity3D制作3D虚拟漫游场景(二)
		
传送门: Unity3D制作3D虚拟漫游场景(一) -------------------------------------------------------------------------- ...
 - 短视频:用快影制作3D音乐视频
		
用快影制作3D音乐视频1打开快影点击开始剪辑导入一张风景照片,按住照片向后拉到自己需要的时长2点击画中画,点击新增,画中画,导入一张照片3点击模板,选择圆形,调整圆形的大小,摆放到上面合适的位置,按照 ...
 - 网页特效:用CSS3制作3D图片立方体旋转特效
		
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
 - 使用 CSS3 & jQuery 制作漂亮的书签动画
		
今天的教程是关于创建使用 CSS 旋转变换和 JavaScript 制作动画书签效果.我们的想法是展现出样书状结构,使单一的色板或列表点击切换.当点击其中一项,我们就会旋转以显示所选择的项目. 在线演 ...
 
随机推荐
- 设计模式之职责链模式(Chain of Responsibility)摘录
			
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...
 - leetcode第九题--Palindrome Number
			
Problem: Determine whether an integer is a palindrome. Do this without extra space. click to show sp ...
 - 基于jQuery的上下无缝滚动应用(单行或多行)
			
工作中遇到的一个js代码,现在对.trigger('mouseleave'),仍一知半解... <script>$(function(){//单行应用var _wrap=$('ul.lin ...
 - Memcache存储大量数据的问题
			
Memcache存储大数据的问题 huangguisu Memcached存储单个item最大数据是在1MB内,假设数据超过1M,存取set和get是都是返回false,并且引起性能的问题. 我们之 ...
 - Oracle入门4-REF Cursor
			
Oracle入门4-REF Cursor 转自:http://blog.sina.com.cn/s/blog_55dbebb00100gxsc.html 自:http://blog.csdn.net/ ...
 - CodeSmith开发系列资料总结
			
CodeSmith开发系列资料总结 最近跟同事在研究CodeSmith,感觉中文文档是少之又少,所以我们自己写(翻译)了一些文档,总结如下,希望对使用CodeSmith的朋友有所帮助: “努力学习的熊 ...
 - JSON.stringify 方法
			
浅谈 JSON.stringify 方法 用过 json 的应该都知道,把一个对象通过 stringify 之后提交给后台或者存储在 Storage 里是很常用的手段.但是 IE6-8 下没有 J ...
 - .NET MVC通过反射获取数据修
			
.NET MVC通过反射获取数据修 折磨了我一个晚上的问题,奈何对物理的反射印象太深了,整天去想着物理的反射.折射怎么解.感谢少将哥哥给我的指点,经过一个晚上对反射的恶补,最终搞定了.纪念一下. 1. ...
 - Android手机外置SD卡(TF卡)的获取方法
			
Android手机上的外置SD卡,起初的时候,即在Android出世的前几年,那时手机的存储是十分有限的,不像现在到处可见16G.32G和64G的存储,因而那时候的手机有的厂商允许插入外置的SD卡,此 ...
 - WCF Restful Service的服务
			
构建基于WCF Restful Service的服务 前言 传统的Asmx服务,由于遵循SOAP协议,所以返回内容以xml方式组织.并且客户端需要添加服务端引用才能使用(虽然看到网络上已经提供了这方面 ...