3D动画实现总结

在这里我们将使用CATransform3D来实现所需要的3D效果。CATransform3DCGAffineTransform是相似的,只不过就是增加了z轴坐标,来表示设备距离我们眼睛的直线距离。

例子是将 《iOS Animations By Tutorials》中的例子有Swift实现改写为Objective-C实现。

先看一下例子最终实现的效果

CATransform3D的说明

先来段代码,这是我们生成3D效果的

CATransform3D identity = CATransform3DIdentity;
identity.m34 = -1.0/1000;

CGFloat remainingPercent = 1.0 - percent;
CGFloat angle = remainingPercent * (-M_PI_2);
CATransform3D rotationTransform = CATransform3DRotate(identity, angle, 0.0, 1.0, 0.0);
CATransform3D translationTransform = CATransform3DMakeTranslation(MenuWidth * percent, 0, 0);
CATransform3D restultTransform = CATransform3DConcat(rotationTransform, translationTransform);

首先说明一下m34的赋值
这里的1000是摄像机距离layer的距离,距离不同,所能看到的视图的范围就不同。可以改变尝试,来获取我们所需的结果。

说明方法CATransform3D CATransform3DRotate (CATransform3D t, CGFloat angle, CGFloat x, CGFloat y, CGFloat z)

  • angle 是所需要变化的角度
  • x y z 设置为零表示不围绕该轴做旋转,如果设置为1,则绕该轴做旋转。

CATransform3DConcat是将两种方式合并为一个动画一起执行。

shouldRasterize属性的默认值是 NO,可将其设置为YES来减轻锯齿的效果。记得动画结束时将其设置为 NO。

self.menuViewController.view.layer.shouldRasterize = NO;

anchorPoint锚点的设置。默认值(0.5,0.5)。通过设置该属性来实现视图围绕不同位置旋转。记得在视图添加到父视图之后在进行设置,因为frame也是相对于锚点的。

self.menuViewController.view.layer.anchorPoint = CGPointMake(1.0,0);

项目地址 OfficeBuddy3D

还有另一种方式添加动画。

    var imageTransform = CATransform3DIdentity
    
    //1
    imageTransform = CATransform3DTranslate(
      imageTransform, 0.0, imageYOffset, 0.0)
    //2
    imageTransform = CATransform3DScale(
      imageTransform, 0.95, 0.6, 1.0)
    //3
    imageTransform = CATransform3DRotate(
      imageTransform, CGFloat(M_PI_4/2), -1.0, 0.0, 0.0)

    let animation = CABasicAnimation(keyPath: "transform")
    animation.fromValue = NSValue(CATransform3D:
      image.layer.transform)
    animation.toValue = NSValue(CATransform3D: imageTransform)
    animation.duration = 0.33
    
    image.layer.addAnimation(animation, forKey: nil)

    image.layer.transform = imageTransform
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Core Animation其实是一个令人误解的命名。你可能认为它只是用来做动画的,但实际上它是从一个叫做Laye...
    小猫仔阅读 9,256评论 1 4
  • Core Animation Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,...
    45b645c5912e阅读 8,199评论 0 21
  • >*很不幸,没人能告诉你母体是什么,你只能自己体会* --骇客帝国 在第四章“可视效果”中,我们研究了一些增强图层...
    夜空下最亮的亮点阅读 5,579评论 0 2
  • 在第四章“视觉效果”中,我们研究了一些增强图层和它的内容显示效果的一些技术,在这一章中,我们将要研究可以用来对图层...
    乐意先生阅读 5,861评论 0 2
  • 从来不曾如此欣赏, 没有一处如此狂欢。 此时的宁静对我的内心如此充满意义, 如此令我感动。 她好像直接向内心倾诉又...
    青衫湿旧阅读 2,695评论 19 21

友情链接更多精彩内容