CATransform3D的m34值动画

简介:

CATransform3D的m34值动画

 

效果

 

源码

https://github.com/YouXianMing/Animations



//
//  CATransform3DM34Controller.m
//  Animations
//
//  Created by YouXianMing on 16/1/9.
//  Copyright © 2016年 YouXianMing. All rights reserved.
//

#import "CATransform3DM34Controller.h"
#import "GCD.h"
#import "Math.h"

@interface CATransform3DM34Controller ()

@property (nonatomic, strong) CALayer   *layer;
@property (nonatomic, strong) GCDTimer  *timer;
@property (nonatomic)         BOOL       transformState;

@end

@implementation CATransform3DM34Controller

- (void)setup {

    [super setup];
    
    [self initLayer];
    
    [self timerEvent];
}

- (void)initLayer {

    // Init layer.
    UIImage *image         = [UIImage imageNamed:@"1"];
    self.layer             = [CALayer layer];
    self.layer.frame       = CGRectMake(0, 0, image.size.width / 2.f, image.size.height / 2.f);
    self.layer.position    = self.view.center;
    self.layer.borderWidth = 4.f;
    self.layer.borderColor = [UIColor blackColor].CGColor;
    self.layer.contents    = (__bridge id)image.CGImage;
    [self.view.layer addSublayer:self.layer];
}

- (void)timerEvent {

    // Timer event.
    self.timer = [[GCDTimer alloc] initInQueue:[GCDQueue mainQueue]];
    [self.timer event:^{
        
        if (self.transformState == NO) {
            
            self.transformState = YES;
            [self transformStateEvent];
            
        } else {
            
            self.transformState = NO;
            [self normalStateEvent];
        }
        
    } timeIntervalWithSecs:3.f delaySecs:3.f];
    [self.timer start];
}

- (void)transformStateEvent {

    // 初始化3D变换,获取默认值
    CATransform3D perspectiveTransform = CATransform3DIdentity;
    
    // 透视
    perspectiveTransform.m34 = -1.0/500.0;
    
    // 位移
    perspectiveTransform = CATransform3DTranslate(perspectiveTransform, 30, -35, 0);
    
    // 空间旋转
    perspectiveTransform = CATransform3DRotate(perspectiveTransform, [Math radianFromDegree:30], 0.75, 1, -0.5);
    
    // 缩放变换
    perspectiveTransform = CATransform3DScale(perspectiveTransform, 0.75, 0.75, 0.75);
    
    self.layer.transform = perspectiveTransform;
    self.layer.speed     = 0.5;
}

- (void)normalStateEvent {

    // 初始化3D变换,获取默认值
    CATransform3D perspectiveTransform = CATransform3DIdentity;
    
    self.layer.transform = perspectiveTransform;
    self.layer.speed     = 0.5;
}

@end

细节

 


目录
相关文章
|
9天前
|
前端开发
HarmonyNext动画大全02-显式动画
HarmonyNext动画大全02-显式动画
20 2
HarmonyNext动画大全02-显式动画
|
Android开发 Java
Android开源DiscreteSeekbar:动画气泡指示当前滑动值
 Android开源DiscreteSeekbar:动画气泡指示当前滑动值 Android本身提供的SeekBar用以调控值以及回调传回当前选择的值。
1405 0
|
2月前
Framer 滚动动画效果集合 (讲解)
Framer 滚动动画效果集合 (讲解)
44 0
|
3月前
|
前端开发
css动画 —— 自定义不规则的动画路径 offset-path (含不规则的动画路径参数获取方法)
css动画 —— 自定义不规则的动画路径 offset-path (含不规则的动画路径参数获取方法)
87 1
|
存储 缓存 Android开发
RecyclerView 动画原理 | 如何存储并应用动画属性值?
RecyclerView 动画原理 | 如何存储并应用动画属性值?
81 0
|
XML 图形学 数据格式
Animation组合动画踩坑-实现循环播放动画,可控制次数
Animation组合动画踩坑-实现循环播放动画,可控制次数
|
JavaScript 开发者
动画-小球动画 flag 标识符的作用分析|学习笔记
快速学习动画-小球动画 flag 标识符的作用分析
160 0
动画-小球动画 flag 标识符的作用分析|学习笔记
|
JavaScript 开发者
动画-小球动画flag标识符的作用分析|学习笔记
快速学习动画-小球动画flag标识符的作用分析
108 0
动画-小球动画flag标识符的作用分析|学习笔记
|
JavaScript 开发者
动画-使用过渡名实现动画|学习笔记
快速学习动画-使用过渡名实现动画
动画-使用过渡名实现动画|学习笔记
|
JavaScript 开发者
动画-小球动画每次重新开始的位置说明|学习笔记
快速学习动画-小球动画每次重新开始的位置说明