热更新demo

IFTTTTransform3DAnimation.m 3.7KB

    // // IFTTTTransform3DAnimation.m // JazzHands // // Created by QFish on 3/3/14. // Copyright (c) 2015 IFTTT Inc. All rights reserved. // #import "IFTTTTransform3DAnimation.h" #pragma mark - IFTTTTransform3D @implementation IFTTTTransform3D + (instancetype)transformWithM34:(CGFloat)m34 { IFTTTTransform3D * transform = [[self alloc] initWithM34:m34]; return transform; } - (instancetype)init { if ((self = [super init])) { self.scale = (IFTTTTransform3DScale){ 1.f, 1.f, 1.f };; } return self; } - (instancetype)initWithM34:(CGFloat)m34 { if ((self = [self init])) { self.m34 = m34; } return self; } - (IFTTTTransform3D *)interpolateTo:(IFTTTTransform3D *)toValue withProgress:(CGFloat)progress { IFTTTTransform3D *betweenTransform = [IFTTTTransform3D new]; betweenTransform.m34 = self.m34; IFTTTTransform3DTranslate translate; translate.tx = [NSNumber interpolateCGFloatFrom:self.translate.tx to:toValue.translate.tx withProgress:progress]; translate.ty = [NSNumber interpolateCGFloatFrom:self.translate.ty to:toValue.translate.ty withProgress:progress]; translate.tz = [NSNumber interpolateCGFloatFrom:self.translate.tz to:toValue.translate.tz withProgress:progress]; IFTTTTransform3DRotate rotate; rotate.angle = [NSNumber interpolateCGFloatFrom:self.rotate.angle to:toValue.rotate.angle withProgress:progress]; rotate.x = [NSNumber interpolateCGFloatFrom:self.rotate.x to:toValue.rotate.x withProgress:progress]; rotate.y = [NSNumber interpolateCGFloatFrom:self.rotate.y to:toValue.rotate.y withProgress:progress]; rotate.z = [NSNumber interpolateCGFloatFrom:self.rotate.z to:toValue.rotate.z withProgress:progress]; IFTTTTransform3DScale scale; scale.sx = [NSNumber interpolateCGFloatFrom:self.scale.sx to:toValue.scale.sx withProgress:progress]; scale.sy = [NSNumber interpolateCGFloatFrom:self.scale.sy to:toValue.scale.sy withProgress:progress]; scale.sz = [NSNumber interpolateCGFloatFrom:self.scale.sz to:toValue.scale.sz withProgress:progress]; betweenTransform.translate = translate; betweenTransform.rotate = rotate; betweenTransform.scale = scale; return betweenTransform; } @end #pragma mark - IFTTTTransform3DAnimation @implementation IFTTTTransform3DAnimation - (void)addKeyframeForTime:(CGFloat)time transform:(IFTTTTransform3D *)transform { [self addKeyframeForTime:time value:transform]; } - (void)addKeyframeForTime:(CGFloat)time transform:(IFTTTTransform3D *)transform withEasingFunction:(IFTTTEasingFunction)easingFunction { [self addKeyframeForTime:time value:transform withEasingFunction:easingFunction]; } - (void)animate:(CGFloat)time { if (!self.hasKeyframes) return; IFTTTTransform3D *iftttTransform = (IFTTTTransform3D *)[self valueAtTime:time]; CATransform3D transform = CATransform3DIdentity; transform.m34 = iftttTransform.m34; transform = CATransform3DRotate(transform, iftttTransform.rotate.angle, iftttTransform.rotate.x, iftttTransform.rotate.y, iftttTransform.rotate.z); transform = CATransform3DScale(transform, iftttTransform.scale.sx, iftttTransform.scale.sy, iftttTransform.scale.sz); transform = CATransform3DTranslate(transform, iftttTransform.translate.tx, iftttTransform.translate.ty, iftttTransform.translate.tz); self.view.layer.transform = transform; } @end