我需要幫助進行圓形過渡。iOS:使用animateTransition方法時無法更改持續時間
我翻遍了你的article,並嘗試將swift更改爲object-c項目。
當我使用動畫控制器時,發生問題。
在使用我的MaterialCircleAnimator.m:
#import "MaterialCircleAnimator.h"
#import "ViewController.h"
#import "ViewController2.h"
@implementation MaterialCircleAnimator
- (NSTimeInterval)transitionDuration:(id <UIViewControllerContextTransitioning>)transitionContext{
return 2.5;
}
- (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext{
self.transitionContext = transitionContext;
UIView* containerView = [transitionContext containerView];
ViewController *fromViewController = (ViewController *) [transitionContext viewControllerForKey:(UITransitionContextFromViewControllerKey)];
UIViewController *toViewController = (UIViewController *)[transitionContext viewControllerForKey:(UITransitionContextToViewControllerKey)];
UIButton* button = fromViewController.button;
[containerView addSubview:toViewController.view];
UIBezierPath* circleMaskPathInitial = [UIBezierPath bezierPathWithOvalInRect:
button.frame];
CGPoint extremePoint = CGPointMake([button center].x, [button center].y - CGRectGetHeight(toViewController.view.bounds));
CGFloat radius = sqrt(extremePoint.x * extremePoint.x) + (extremePoint.y * extremePoint.y);
UIBezierPath* circleMaskPathFinal = [UIBezierPath bezierPathWithOvalInRect:
CGRectInset(button.frame, -radius, -radius)];
CAShapeLayer* maskLayer = [CAShapeLayer new];
maskLayer.path = circleMaskPathFinal.CGPath;
toViewController.view.layer.mask = maskLayer;
CABasicAnimation* maskLayerAnimation = [CABasicAnimation animationWithKeyPath:@"path"];
maskLayerAnimation.fromValue = (__bridge id)(circleMaskPathInitial.CGPath);
maskLayerAnimation.toValue = (__bridge id)([circleMaskPathFinal CGPath]);
maskLayerAnimation.duration = [self transitionDuration: transitionContext];
maskLayerAnimation.delegate = self;
[maskLayer addAnimation:maskLayerAnimation forKey:@"path"];
}
-(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{
[self.transitionContext completeTransition:![self.transitionContext transitionWasCancelled]];
[self.transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey].view.layer.mask = nil;
}
@end
而且MaterialCircleAnimator.h:
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@interface MaterialCircleAnimator : NSObject <UIViewControllerAnimatedTransitioning>
@property (nonatomic, weak) IBOutlet id<UIViewControllerContextTransitioning> transitionContext;
@end
我發現我的代碼不能改變動畫的持續時間。
無論NSTimeInterval如何更改,圓形動畫將持續默認0.3秒。
這就是指的項目,我下載 http://cdn1.raywenderlich.com/wp-content/uploads/2014/12/CircleTransitionFinalUpdated.zip 而我的項目在Github上: https://github.com/ TindleWei/MaterialCircleAnimation – AdamWei