Skip to content

Commit

Permalink
增加POP动画引擎
Browse files Browse the repository at this point in the history
  • Loading branch information
KittenYang committed Feb 5, 2015
1 parent 6bcd732 commit 4519d20
Show file tree
Hide file tree
Showing 126 changed files with 13,017 additions and 453 deletions.
1,510 changes: 1,065 additions & 445 deletions KYPingTransition.xcodeproj/project.pbxproj

Large diffs are not rendered by default.

Binary file not shown.
10 changes: 10 additions & 0 deletions KYPingTransition.xcworkspace/contents.xcworkspacedata

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Binary file not shown.
4 changes: 3 additions & 1 deletion KYPingTransition/PingInvertTransition.m
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ @interface PingInvertTransition()
@implementation PingInvertTransition

- (NSTimeInterval)transitionDuration:(id <UIViewControllerContextTransitioning>)transitionContext{
return 0.5f;
return 0.2f;
}

- (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext{
Expand Down Expand Up @@ -49,6 +49,8 @@ - (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionC
pingAnimation.fromValue = (__bridge id)(startPath.CGPath);
pingAnimation.toValue = (__bridge id)(finalPath.CGPath);
pingAnimation.duration = [self transitionDuration:transitionContext];
pingAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];

pingAnimation.delegate = self;


Expand Down
1 change: 1 addition & 0 deletions KYPingTransition/PingTransition.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import <pop/POP.h>

@interface PingTransition : NSObject<UIViewControllerAnimatedTransitioning>

Expand Down
66 changes: 59 additions & 7 deletions KYPingTransition/PingTransition.m
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ @interface PingTransition ()
@implementation PingTransition

- (NSTimeInterval)transitionDuration:(id <UIViewControllerContextTransitioning>)transitionContext{
return 0.5f;
return 0.2f;
}

- (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext{
Expand Down Expand Up @@ -47,19 +47,71 @@ - (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionC
CAShapeLayer *maskLayer = [CAShapeLayer layer];
maskLayer.path = maskFinalBP.CGPath; //将它的 path 指定为最终的 path 来避免在动画完成后会回弹
toVC.view.layer.mask = maskLayer;


CAKeyframeAnimation *keyFrame = [CAKeyframeAnimation animationWithKeyPath:@"path"];
keyFrame.values = @[(__bridge id)(maskStartBP.CGPath),(__bridge id)(maskFinalBP.CGPath)];
keyFrame.duration = 100.0f;
keyFrame.additive = YES;
keyFrame.removedOnCompletion = NO;
keyFrame.fillMode = kCAFillModeForwards;


[maskLayer addAnimation:keyFrame forKey:nil];
maskLayer.speed = 0.0;


POPAnimatableProperty* pop = [POPAnimatableProperty propertyWithName:@"timeOffset" initializer:^(POPMutableAnimatableProperty *prop) {
// read value
prop.readBlock = ^(CAShapeLayer *obj, CGFloat values[]) {
values[0] = obj.timeOffset;
};
// write value
prop.writeBlock = ^(CAShapeLayer *obj, const CGFloat values[]) {
obj.timeOffset = values[0];
};
// dynamics threshold
prop.threshold = 0.1;
}];


POPSpringAnimation *popSpring = [POPSpringAnimation animation];
popSpring.fromValue = @(0.0);
popSpring.toValue = @(100.f);
popSpring.springBounciness = 2.1;
popSpring.springSpeed = 200.4;
popSpring.dynamicsTension = 200;
popSpring.dynamicsFriction = 100.f;
popSpring.dynamicsMass = 1.f;
popSpring.property = pop;
popSpring.delegate = self;
[maskLayer pop_addAnimation:popSpring forKey:nil];



// kPOPShapeLayerStrokeStart

//创建一个关于 path 的 CABasicAnimation 动画来从 circleMaskPathInitial.CGPath 到 circleMaskPathFinal.CGPath 。同时指定它的 delegate 来在完成动画时做一些清除工作
CABasicAnimation *maskLayerAnimation = [CABasicAnimation animationWithKeyPath:@"path"];
maskLayerAnimation.fromValue = (__bridge id)(maskStartBP.CGPath);
maskLayerAnimation.toValue = (__bridge id)((maskFinalBP.CGPath));
maskLayerAnimation.duration = [self transitionDuration:transitionContext];
maskLayerAnimation.delegate = self;
// CABasicAnimation *maskLayerAnimation = [CABasicAnimation animationWithKeyPath:@"path"];
// maskLayerAnimation.fromValue = (__bridge id)(maskStartBP.CGPath);
// maskLayerAnimation.toValue = (__bridge id)((maskFinalBP.CGPath));
// maskLayerAnimation.duration = [self transitionDuration:transitionContext];
// maskLayerAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
// maskLayerAnimation.delegate = self;
//
// [maskLayer addAnimation:maskLayerAnimation forKey:@"path"];

[maskLayer addAnimation:maskLayerAnimation forKey:@"path"];

}


- (void)pop_animationDidStop:(POPAnimation *)anim finished:(BOOL)finished{
//告诉 iOS 这个 transition 完成
[self.transitionContext completeTransition:![self. transitionContext transitionWasCancelled]];
//清除 fromVC 的 mask
[self.transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey].view.layer.mask = nil;
[self.transitionContext viewControllerForKey:UITransitionContextToViewControllerKey].view.layer.mask = nil;
}
#pragma mark - CABasicAnimation的Delegate
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{

Expand Down
1 change: 1 addition & 0 deletions Podfile
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
pod 'pop', '~> 1.0.7'
10 changes: 10 additions & 0 deletions Podfile.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
PODS:
- pop (1.0.7)

DEPENDENCIES:
- pop (~> 1.0.7)

SPEC CHECKSUMS:
pop: 2f14a1ea61339767af9e66741b418c831b3844df

COCOAPODS: 0.35.0
1 change: 1 addition & 0 deletions Pods/Headers/Build/pop/FloatConversion.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Build/pop/POP.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Build/pop/POPAction.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Build/pop/POPAnimatableProperty.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Build/pop/POPAnimation.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Build/pop/POPAnimationEvent.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Build/pop/POPAnimationEventInternal.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Build/pop/POPAnimationExtras.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Build/pop/POPAnimationInternal.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Build/pop/POPAnimationPrivate.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Build/pop/POPAnimationRuntime.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Build/pop/POPAnimationTracer.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Build/pop/POPAnimationTracerInternal.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Build/pop/POPAnimator.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Build/pop/POPAnimatorPrivate.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Build/pop/POPBasicAnimation.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Build/pop/POPBasicAnimationInternal.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Build/pop/POPCGUtils.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Build/pop/POPCustomAnimation.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Build/pop/POPDecayAnimation.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Build/pop/POPDecayAnimationInternal.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Build/pop/POPDefines.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Build/pop/POPGeometry.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Build/pop/POPLayerExtras.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Build/pop/POPMath.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Build/pop/POPPropertyAnimation.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Build/pop/POPPropertyAnimationInternal.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Build/pop/POPSpringAnimation.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Build/pop/POPSpringAnimationInternal.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Build/pop/POPSpringSolver.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Build/pop/POPVector.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Build/pop/TransformationMatrix.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Build/pop/UnitBezier.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Public/pop/POP.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Public/pop/POPAnimatableProperty.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Public/pop/POPAnimation.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Public/pop/POPAnimationEvent.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Public/pop/POPAnimationExtras.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Public/pop/POPAnimationTracer.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Public/pop/POPAnimator.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Public/pop/POPBasicAnimation.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Public/pop/POPCustomAnimation.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Public/pop/POPDecayAnimation.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Public/pop/POPDefines.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Public/pop/POPGeometry.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Public/pop/POPLayerExtras.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Public/pop/POPPropertyAnimation.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Pods/Headers/Public/pop/POPSpringAnimation.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions Pods/Manifest.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 4519d20

Please sign in to comment.