之前我们讲过可以用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图像和动画的更多相关文章

  1. ZAM 3D 制作3D动画字幕 用于Xaml导出

    原地址-> http://www.cnblogs.com/yk250/p/5662788.html 介绍:对经常使用Blend做动画的人来说,ZAM 3D 也很好上手,专业制作3D素材的XAML ...

  2. Qt Creator中的3D绘图及动画教程(参照NeHe)

    Qt Creator中的3D绘图及动画教程(参照NeHe) http://blog.csdn.net/cly116/article/details/47184729 刚刚学习了Qt Creator,发 ...

  3. 纯CSS3超酷3D旋转立方体动画特效

    简要教程 这是一款神奇的纯 CSS3 立方体动画特效插件.使用CSS3来制作动画效果已经成为WEB前端开发的一种时尚,从简单的颜色和尺寸动画,到复杂的旋转.翻转动画, CSS3 展现了它无穷的魅力.使 ...

  4. 纯CSS实现3D图像轮转

    CSS演武场今天继续,今天看一个纯css实现的3D图像轮转效果,请大家猛戳研究效果先,也可下载收藏先. 首先看html文件,div.billboard为效果的容器,利用10个div.poster分割图 ...

  5. 张瀚荣:如何用UE4制作3D动作游戏

    转自:http://www.gamelook.com.cn/2015/06/218267 GameLook报道/ 6月5日,2015年第三期GameLook开放日‧虚幻引擎专场活动在上海正式举行,此次 ...

  6. Unity3D制作3D虚拟漫游场景(二)

    传送门: Unity3D制作3D虚拟漫游场景(一) -------------------------------------------------------------------------- ...

  7. 短视频:用快影制作3D音乐视频

    用快影制作3D音乐视频1打开快影点击开始剪辑导入一张风景照片,按住照片向后拉到自己需要的时长2点击画中画,点击新增,画中画,导入一张照片3点击模板,选择圆形,调整圆形的大小,摆放到上面合适的位置,按照 ...

  8. 网页特效:用CSS3制作3D图片立方体旋转特效

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  9. 使用 CSS3 & jQuery 制作漂亮的书签动画

    今天的教程是关于创建使用 CSS 旋转变换和 JavaScript 制作动画书签效果.我们的想法是展现出样书状结构,使单一的色板或列表点击切换.当点击其中一项,我们就会旋转以显示所选择的项目. 在线演 ...

随机推荐

  1. 推荐两个针对github的chrome插件

    作为一只程序猿,在github上找代码.看代码是再正常不过的事情了.这时候有个工具可以方便你翻看代码,想必是极好的. Sourcegraph for GitHub 这个插件允许你像使用IDE那样浏览代 ...

  2. Django小例子 – 模型数据的模板呈现

    学习Django的这几天,学习过程还是很愉快的,django采用的MVC架构,学习曲线十分平缓,在深入学习之前,先简单的整理记录下django从数据库中获取数据并在模板中使用的方法.温故而知新 ^_^ ...

  3. Node.js日志框架选型比較:Winston

    日志对于问题定位.调试,系统性能调优至关重要,尤其是系统复杂以及在线执行的情况下. 好的开发框架都会有一个可开启关闭/可配置记录级别的日志系统.我们从下面几个方面来做选型: 1. 每行日志都须要有准确 ...

  4. jquery 超简单的点赞效果

    1.HTML(可以优化一下,尽量少些几个标签.....) <div id="dianz"> <b class="cz"><em&g ...

  5. 分布式文件系统之MogileFS工作原理及实现过程

    MogileFS是一套高效的文件自动备份组件,由Six Apart开发,广泛应用在包括LiveJournal等web2.0站点上.MogileFS由3个部分组成:   第1个部分:是server端,包 ...

  6. Lamda Action Func Thread 实例

    lamda表达式 格式:( 形参列表 ) => { 函数体 } 作用:简化匿名方法的书写,可用在任何可使用匿名方法和强类型代理的地方: Action是无返回值的泛型委托. Action 表示无参 ...

  7. VS2013全攻略(安装,技巧,快捷键,插件)!

    工欲善其事,必先利其器.VS2013全攻略(安装,技巧,快捷键,插件)! 之前一篇<c++的性能, c#的产能?!鱼和熊掌可以兼得,.NET NATIVE初窥>承蒙大家喜爱和编辑推荐,在此 ...

  8. 分页存储过程实现-SqlServer

    一个通用的分页存储过程实现-SqlServer(附上sql源码,一键执行即刻搭建运行环境) 使用前提 查询表必须有ID字段,且该字段不能重复,建议为自增主键 背景 如果使用ADO.NET进行开发,在查 ...

  9. Asp.net MVC4.0(net4.5) 部署到window server 2003上的解决方案

    Asp.net MVC4.0(net4.5) 部署到window server 2003上的解决方案 最近做了一个Web项目,也没多想就用了Asp.net MVC4.0 ,MVC4.0默认的目标fra ...

  10. Light, more light - PC110701

    欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/uva10110.html 原创:Ligh ...