diff --git a/RZTransitions.podspec b/RZTransitions.podspec index d853c8d..08e4635 100644 --- a/RZTransitions.podspec +++ b/RZTransitions.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "RZTransitions" - s.version = "1.2" + s.version = "1.2.1" s.summary = "RZTransitions is a library to help make iOS7 custom View Controller transitions slick and simple." s.description = <<-DESC @@ -19,7 +19,7 @@ Pod::Spec.new do |s| s.social_media_url = "http://twitter.com/raizlabs" s.platform = :ios, "7.0" - s.source = { :git => "https://github.com/Raizlabs/RZTransitions.git", :tag => "1.2" } + s.source = { :git => "https://github.com/Raizlabs/RZTransitions.git", :tag => "1.2.1" } s.source_files = "RZTransitions/**/*.{h,m,swift}" s.frameworks = "CoreGraphics", "UIKit", "Foundation" s.requires_arc = true diff --git a/RZTransitions/Interactors/RZBaseSwipeInteractionController.m b/RZTransitions/Interactors/RZBaseSwipeInteractionController.m index 9911069..81c59c0 100644 --- a/RZTransitions/Interactors/RZBaseSwipeInteractionController.m +++ b/RZTransitions/Interactors/RZBaseSwipeInteractionController.m @@ -90,42 +90,35 @@ - (void)handlePanGesture:(UIPanGestureRecognizer *)panGestureRecognizer } } else { - if ( self.action & RZTransitionAction_Pop ) { - [self cancelInteractiveTransition]; - self.isInteractive = NO; + if (self.action & RZTransitionAction_Pop) { [self.fromViewController.navigationController popViewControllerAnimated:YES]; } - else if ( self.action & RZTransitionAction_Dismiss ) { - [self cancelInteractiveTransition]; - self.isInteractive = NO; + else if (self.action & RZTransitionAction_Dismiss) { [self.fromViewController dismissViewControllerAnimated:YES completion:nil]; } } break; - + case UIGestureRecognizerStateChanged: - if ( self.isInteractive ) { - self.shouldCompleteTransition = ( percentage >= [self swipeCompletionPercent] ); + if (self.isInteractive) { + self.shouldCompleteTransition = (percentage >= [self swipeCompletionPercent]); [self updateInteractiveTransition:percentage]; } break; - + case UIGestureRecognizerStateCancelled: - self.isInteractive = NO; - [self cancelInteractiveTransition]; - break; - case UIGestureRecognizerStateEnded: - if ( self.isInteractive ) { - self.isInteractive = NO; - if ( !self.shouldCompleteTransition || panGestureRecognizer.state == UIGestureRecognizerStateCancelled ) { + if (self.isInteractive) { + if (!self.shouldCompleteTransition) { [self cancelInteractiveTransition]; } else { [self finishInteractiveTransition]; } + + self.isInteractive = NO; } - + default: break; } diff --git a/RZTransitions/Transitions/RZCirclePushAnimationController.h b/RZTransitions/Transitions/RZCirclePushAnimationController.h index a2caaea..78c66a9 100644 --- a/RZTransitions/Transitions/RZCirclePushAnimationController.h +++ b/RZTransitions/Transitions/RZCirclePushAnimationController.h @@ -33,7 +33,7 @@ @protocol RZCirclePushAnimationDelegate; -@interface RZCirclePushAnimationController : RZZoomPushAnimationController <RZAnimationControllerProtocol> +@interface RZCirclePushAnimationController : RZZoomPushAnimationController /** * Animation delegate for controlling information about the circle transition. diff --git a/RZTransitions/Transitions/RZCirclePushAnimationController.m b/RZTransitions/Transitions/RZCirclePushAnimationController.m index 247fc09..70d0207 100644 --- a/RZTransitions/Transitions/RZCirclePushAnimationController.m +++ b/RZTransitions/Transitions/RZCirclePushAnimationController.m @@ -37,6 +37,8 @@ @interface RZCirclePushAnimationController () +@property (weak, nonatomic) UIView *maskedView; + - (CGPoint)circleCenterPointWithFromView:(UIView *)fromView; - (CGFloat)circleStartingRadiusWithFromView:(UIView *)fromView toView:(UIView *)toView; @@ -60,6 +62,8 @@ - (instancetype)init - (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext { + [super animateTransition:transitionContext]; + UIView *fromView = [(NSObject *)transitionContext rzt_fromView]; UIView *toView = [(NSObject *)transitionContext rzt_toView]; @@ -96,6 +100,7 @@ - (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionCo toView.layer.mask = circleMaskLayer; toView.layer.masksToBounds = YES; [circleMaskLayer addAnimation:circleMaskAnimation forKey:kRZCircleMaskAnimation]; + self.maskedView = toView; } else { [circleMaskAnimation setFillMode:kCAFillModeForwards]; @@ -108,9 +113,21 @@ - (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionCo fromView.layer.mask = circleMaskLayer; fromView.layer.masksToBounds = YES; [circleMaskLayer addAnimation:circleMaskAnimation forKey:kRZCircleMaskAnimation]; + self.maskedView = fromView; } - - [super animateTransition:transitionContext]; +} + +- (void)animationEnded:(BOOL)transitionCompleted +{ + // animationEnded: is a optional method of the UIViewControllerAnimatedTransitioning protocol. + // RZZoomPushAnimationController does not currently implement this method, but might at some point, + // so make sure we are doing something sane here. + if ([[[self class] superclass] respondsToSelector:@selector(animationEnded:)]) { + [super animationEnded:transitionCompleted]; + } + + self.maskedView.layer.mask = nil; + self.maskedView = nil; } #pragma mark - Helper Methods diff --git a/RZTransitions/Transitions/RZZoomPushAnimationController.m b/RZTransitions/Transitions/RZZoomPushAnimationController.m index a2129d6..d1b1eb5 100644 --- a/RZTransitions/Transitions/RZZoomPushAnimationController.m +++ b/RZTransitions/Transitions/RZZoomPushAnimationController.m @@ -64,7 +64,7 @@ - (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionCo }]; } else { - if (transitionContext.presentationStyle == UIModalPresentationNone) { + if (transitionContext.presentationStyle == UIModalPresentationNone || transitionContext.presentationStyle == UIModalPresentationFullScreen) { [container insertSubview:toView belowSubview:fromView]; } toView.transform = CGAffineTransformMakeScale(1.0 + kRZPushScaleChangePct, 1.0 + kRZPushScaleChangePct);