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

  • 相关阅读:
    钱多多软件制作04
    团队项目01应用场景
    HDU 4411 arrest
    HDU 4406 GPA
    HDU 3315 My Brute
    HDU 3667 Transportation
    HDU 2676 Matrix
    欧拉回路三水题 POJ 1041 POJ 2230 POJ 1386
    SPOJ 371 BOXES
    POJ 3422 Kaka's Matrix Travels
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/3765894.html
Copyright © 2011-2022 走看看