zoukankan      html  css  js  c++  java
  • 关于CATransform3D矩阵变换的简单解析

    关于CATransform3D矩阵变换的简单解析

    效果图:

    我能能够用上的CATransform3D其实很简单,并不复杂.

    CATransform3D有着4种东西我们可以设置.

    1. 透视效果(由m34的值决定)

    2. 位移变换(主要是x,y方向)

    3. 缩放变换

    4. 空间旋转

    源码:

    //
    //  RootViewController.m
    //
    //  Copyright (c) 2014年 Y.X. All rights reserved.
    //
    
    #import "RootViewController.h"
    #import "CATransform3DOperation.h"
    #import "YXGCD.h"
    
    @interface RootViewController ()
    
    @property (nonatomic, strong) GCDTimer *timer;
    
    @end
    
    // 将角度转换为弧度
    #define DEGREES_TO_RADIANS(d)  ((d) * M_PI / 180.f)
    
    @implementation RootViewController
    
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        self.view.backgroundColor = [UIColor blackColor];
        
        // 给Layer一个图片内容
        UIImage *image = [UIImage imageNamed:@"4"];
        CALayer *layer = [CALayer layer];
        layer.frame = CGRectMake(0, 0, image.size.width, image.size.height);
        layer.position = self.view.center;
        layer.borderWidth = 4.f;
        layer.borderColor = [UIColor redColor].CGColor;
        layer.contents = (__bridge id)image.CGImage;
        [self.view.layer addSublayer:layer];
        
        // 6s后执行操作
        [[GCDQueue mainQueue] execute:^{
            
            // 初始化3D变换,获取默认值
            CATransform3D perspectiveTransform = CATransform3DIdentity;
            
            // 透视
            perspectiveTransform.m34 = -1.0/500.0;
            
            // 位移
            perspectiveTransform = CATransform3DTranslate(perspectiveTransform, 30, -35, 0);
            
            // 空间旋转
            perspectiveTransform = CATransform3DRotate(perspectiveTransform,
                                                       DEGREES_TO_RADIANS(30), .75, 1, -0.5);
            
            // 缩放变换
            perspectiveTransform = CATransform3DScale(perspectiveTransform, 0.75, 0.75, 0.75);
            
            layer.transform = perspectiveTransform;
            layer.speed = 0.5;
            
        } afterDelay:NSEC_PER_SEC * 6];
    
        // 9s后执行操作
        [[GCDQueue mainQueue] execute:^{
            
            // 初始化3D变换,获取默认值
            CATransform3D perspectiveTransform = CATransform3DIdentity;
            
            layer.transform = perspectiveTransform;
            layer.speed = 0.5;
            
        } afterDelay:NSEC_PER_SEC * 9];
    }
    
    
    @end

    核心代码:

    http://stackoverflow.com/questions/3881446/meaning-of-m34-of-catransform3d

  • 相关阅读:
    [翻译] M13ProgressSuite
    控制器转场动画详解
    [翻译] SIAlertView
    隐藏导航栏之后支持手势退回上一个控制器
    UIView的无损截图
    [翻译] UIColor-uiGradientsAdditions
    简化通知中心的使用
    Java Web应用的开发环境配置
    StartUML的基础的使用,用例图,序列图
    SQLyog图形化l数据库的操作和学习
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/3765894.html
Copyright © 2011-2022 走看看