OpenGL ES-05-案例03-CoreAnimation绘

2020-08-08  本文已影响0人  宇宙那么大丶

前言

相比GLKit绘制正方体,我们来看一下CoreAnimation怎么做。

一、效果图

图片可能显示卡顿,模拟器没感觉


二、分析流程

image.png

三、注意事项

四、代码

-(void)createCube{
    
    //1、设置self.View的layer图层
    //这里把layer层通过放射变换,相当于换了一个角度,为了让我们更加清楚的看到一个正方体,而不是一个四边形
    CATransform3D perspective = CATransform3DIdentity;
    //核心动画设置透视投影
    perspective.m34 = -1.0 / 500.0;
    //围绕x、y轴分别旋转45度
    perspective = CATransform3DRotate(perspective, -M_PI_4, 1, 0, 0);
    perspective = CATransform3DRotate(perspective, -M_PI_4, 0, 1, 0);
    self.view.layer.sublayerTransform = perspective;
    
    
    
    
    
    NSArray *textArr = @[@"1",@"2",@"3",@"4",@"5",@"6"];
    //2、循环创建6个label,每个label都进行不同方向的旋转平移,组成一个正方体

    for (int i = 0; i < textArr.count; i++) {
        
        UILabel *faceLab = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 200, 200)];
        faceLab.center = CGPointMake(self.view.frame.size.width/2, self.view.frame.size.height/2);
        faceLab.backgroundColor = [UIColor colorWithRed:arc4random() %255 /255.0f green:arc4random() %255 /255.0f blue:arc4random() %255 /255.0f alpha:1.0f];
        faceLab.text = textArr[i];
        faceLab.textAlignment = NSTextAlignmentCenter;
        faceLab.font = [UIFont fontWithName:@"Copperplate-Bold" size:50];
        faceLab.textColor = UIColor.whiteColor;
        
        [self.view addSubview:faceLab];
        
        CATransform3D transform;
        if (i == 0) {
            
            transform = CATransform3DMakeTranslation(0, 0, 100);
            
        }else if (i == 1) {
            
            transform = CATransform3DMakeTranslation(100, 0, 0);
            transform = CATransform3DRotate(transform, M_PI_2, 0, 1, 0);
            
        }else if (i == 2) {
            
            transform = CATransform3DMakeTranslation(0, -100, 0);
            transform = CATransform3DRotate(transform, M_PI_2, 1, 0, 0);
            
        }else if (i == 3) {
            
            transform = CATransform3DMakeTranslation(0, 100, 0);
            transform = CATransform3DRotate(transform, -M_PI_2, 1, 0, 0);
            
        }else if (i == 4) {
            
            transform = CATransform3DMakeTranslation(-100, 0, 0);
            transform = CATransform3DRotate(transform, -M_PI_2, 0, 1, 0);
            
        }else if (i == 5) {
            
            transform = CATransform3DMakeTranslation(0, 0, -100);
            transform = CATransform3DRotate(transform, M_PI, 0, 1, 0);
            
        }
        
        faceLab.layer.transform = transform;
        
        
    }
    
}


-(void) addCADisplayLink{
    
    self.angle = 0;
    self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(update)];
    [self.displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];
    
}


- (void)update {
    
    //1、计算旋转角度
    self.angle = (self.angle + 5) % 360;
    //2、转成弧度
    float deg = self.angle * (M_PI / 180);
    //3、设置旋转矩阵
    CATransform3D temp = CATransform3DIdentity;
    //围绕(0.3,1,0.7)进行旋转
    temp = CATransform3DRotate(temp, deg, 0.3, 1, 0.7);
    self.view.layer.sublayerTransform = temp;
}


上一篇下一篇

猜你喜欢

热点阅读