美文网首页
IOS 3D旋转实现介绍

IOS 3D旋转实现介绍

作者: 海纳百川_88 | 来源:发表于2018-08-24 14:08 被阅读0次

    前沿

    最近遇到一个需求,关于3D旋转问题

    由于公司内部保密机制,图片无法上传,我这边简单介绍下

    需求:类似星际图一样的效果,中间图在自转,其他有一些小视图围绕着中间视图转,并且有近大远小的效果

    实现

    这个需求拆分成两步

    1关于中间视图自转

    2周围小视图旋转

    1、中间视图自转

    主要采取两部,首先将Image加载到imageView上,然后iamgeView加载到中间的视图上

    将中间视图使用3D的trasform中的m34进行倾斜75度,然后imageView做自转

    实现:先看每个矩阵里数字代表的含义:

    struct CATransform3D

    {

    CGFloat m11(x缩放), m12(y切变), m13(旋转), m14();

    CGFloat m21(x切变), m22(y缩放), m23(), m24();

    CGFloat m31(旋转), m32(), m33(), m34(透视效果);

    CGFloat m41(x平移), m42(y平移), m43(z平移), m44();

    };

    我们所需要的正是 m34 。

    CATransform3D rotate = CATransform3DMakeRotation(-75*M_PI/180.0f, 1, 0, 0);       CGFloatdisZ =270;

    CATransform3D scale = CATransform3DIdentity;

    scale.m34=1.0f/disZ;

     CATransform3Dtransform =CATransform3DConcat(rotate, scale);

    _bgView.layer.transform= transform;

    备注:_bgView(就是旋转图片的父视图)

    关于ImageView的自转:

    _iconImageView.transform = CGAffineTransformMakeRotation(count*SPEED *M_PI/180);

    备注:count*SPEED *M_PI/180为旋转角度,主要是用NSTImer每0.01秒调用一次,计算角度

    2周围小视图旋转

    创建多个小视图,同理在NSTimer每0.01秒调用一次

    static int count =0;

        ++count;

        for(inti =0; i <6; i++) {

          UIButton* button = (UIButton*)[selfviewWithTag:100+ i];

            CGFloatangle =150+60* i + count *SPEED;

            doublesinAngle =sin(angle *M_PI/180);

            doublecosAngle =cos(angle *M_PI/180);

            CGFloatcenterX =SCREEN_SIZE.width/2+ cosAngle *RADIUS;

            CGFloatcenterY =SCREEN_SIZE.height/2+ sinAngle *RADIUS*scaleValue;

            button.center=CGPointMake(centerX, centerY);                      button.transform=CGAffineTransformMakeScale(0.7+sinAngle*0.3,0.7+sinAngle*0.3);

        }

    以上就为我实现的思路,如果有问题请联系我邮箱:578145120@qq.com

    相关文章

      网友评论

          本文标题:IOS 3D旋转实现介绍

          本文链接:https://www.haomeiwen.com/subject/xbvbiftx.html