//
// SFPinterestAnimationController.h
// TattooFun
//
// Created by zhang on 2016/12/26.
// Copyright © 2016年 zhang. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@interface SFPushAnimationController : NSObject<UIViewControllerAnimatedTransitioning>
@end
//
// SFPinterestAnimationController.m
// TattooFun
//
// Created by zhang on 2016/12/26.
// Copyright © 2016年 zhang. All rights reserved.
//
#import "SFPushAnimationController.h"
#import "SFTransitionProtocol.h"
#import "UIView+SFSnapShot.h"
@interface SFPushAnimationController ()
@end
@implementation SFPushAnimationController
- (NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext{
return 0.5f;
}
- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext{
if (![[transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey] conformsToProtocol:@protocol(SFTransitionProtocol)]) {
return;
}
UIViewController<SFTransitionProtocol> *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
UIViewController<SFTransitionProtocol> *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
UIView *containerView = [transitionContext containerView];
UIView *fromView = [transitionContext viewForKey:UITransitionContextFromViewKey];
UIView *toView = [transitionContext viewForKey:UITransitionContextToViewKey];
UIView *fromTransitionView = [fromVC snapShotViewForTransition];
UIView *snapShotView = [[UIImageView alloc] initWithImage:[fromTransitionView sf_snapShotImage]];
snapShotView.alpha = 1;
snapShotView.frame = [containerView convertRect:fromTransitionView.frame fromView:fromTransitionView.superview];
//NSLog(@"------- snapShotView.frame = %@", NSStringFromCGRect(snapShotView.frame));
CGRect finalFrame = [transitionContext finalFrameForViewController:toVC];
//NSLog(@"------- finalFrame = %@", NSStringFromCGRect(finalFrame));
toView.frame = finalFrame;
toView.alpha = 0;
[containerView addSubview:snapShotView];
[containerView addSubview:toView];
CGRect destinationFrame = CGRectMake(12, 12+ 64, containerView.frame.size.width - 24, (containerView.frame.size.width - 24) * snapShotView.bounds.size.height / snapShotView.bounds.size.width);
//NSLog(@"------- destinationFrame = %@", NSStringFromCGRect(destinationFrame));
[UIView animateWithDuration:[self transitionDuration:transitionContext] delay:0 usingSpringWithDamping:0.7 initialSpringVelocity:1.0 options:UIViewAnimationOptionCurveLinear animations:^{
snapShotView.frame = destinationFrame;
fromView.alpha = 0;
} completion:^(BOOL finished) {
}];
[UIView animateWithDuration:0.15 delay:0.3 options:UIViewAnimationOptionCurveLinear animations:^{
toView.alpha = 1.f;
} completion:^(BOOL finished) {
fromView.alpha = 1;
snapShotView.alpha = 0;
[snapShotView removeFromSuperview];
[transitionContext completeTransition:![transitionContext transitionWasCancelled]];
}];
}
@end