zoukankan      html  css  js  c++  java
  • 【iOS】用Layer创建一个三维模型以及拖动

    关于CALayer的介绍以及基本属性,在这篇博客中有交代:CoreAnimation —— CALayer

    这篇博客讲述简单的通过对layer的transform属性的设置一个CATransform3D来进行自定义三维图形,甚至后续的处理。

    通常简单的仿射变换我们也是通过对其的transform属性进行设置。不过这里设置的是一个3D变换类。如果线性代数很好的话,那应该能够理解内部具体做了如何的矩阵运算。

    首先我子类化一个UIView对象,把图形的绘制在这个自定义View上进行。

    接口方面

    类别中有两个内部成员

    CALayer *_cubeLayer; //main layer
    GLKMatrix4 _rotMatrix;


    第一个是我们需要绘制正方体的layer。

    第二个是在导入GLKit框架后,从中引入的一个矩阵变换类,我们在触摸屏幕拖动时,需要使用到这个类对正方体进行旋转处理。

    初始化主layer

    正式绘制正方体

    这里的m34不是星体- -,3D变形矩阵的m34通常应该设置为-1/EYE_DISTANCE,这里设置为2000已经足够好。

    addCubeLayer的实现

    这里为了更方便观察,使用的是渐变Layer,颜色为宏,可以自由修改。

    注意给其抗锯齿设为了YES。通常我们还可以在整个项目的info.plist文件中设置该内容,不过设置会对整个项目的性能产生不好的影响,所以一般来说,需要的时候再设置也是一个不错的选择。

    这样我们就简单的创建好了一个正方体,不过当前摆放很正,所以只能看到一个正方形平面,下面我们给他设置自动旋转后给他一个沿着坐标轴的角度偏转,再无限围着y轴转就OK了。

    这时运行程序我们就能看到一个旋转的三维正方体了

    下面给其扩展一个拖动收拾旋转功能

    首先给view增加一个拖动收拾,然后在Action中实现

    经过对矩阵的实时处理后,我们可以使用拖动收拾来在视图中实时的调整3D正方体的旋转了。

    Demo源码:

    CSDN:点击打开链接

    GitHub:Rannie / HRCube3D

    喜欢的话可以去点个星:)

  • 相关阅读:
    jmeter笔记5
    jmeter笔记4
    jmeter笔记3
    jmeter笔记2
    jmeter笔记1
    robot API笔记4
    robotframework笔记27
    robotframework笔记25
    robotframework笔记26
    robotframework笔记24
  • 原文地址:https://www.cnblogs.com/BinShao/p/3551349.html
Copyright © 2011-2022 走看看