【发布时间】:2013-09-20 19:33:13
【问题描述】:
我正在制作自定义呈现和关闭过渡,但遇到了一些问题。我想做的是在 iOS 7 中重复这个很酷的深度动画(当我们打开/关闭一些应用程序时)。 我有第一和第二控制器。所有动画都在 First 控制器中(它支持 UIViewControllerTransitioningDelegate 和 UIViewControllerAnimatedTransitioning)。所以,我只是在检查:如果它正在呈现 - 我正在做一个动画(放大第一和第二个视图),如果它正在关闭 - 我正在做另一个动画(缩小第一和第二个视图)。当前动画效果很好,问题出现在关闭动画中。出于某种原因,当我缩小我的第二个控制器(它是 UINavigationController)时,我看到它背后的黑色背景(这是错误的,因为我想在缩小我的第一个控制器时看到它)。这是我来自 First Controller 的代码
- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext {
UIView *transitionView = [transitionContext containerView];
id toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
id fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
BOOL isPresenting;
isPresenting = [toViewController isKindOfClass:[UINavigationController class]];
UINavigationController *navigator = isPresenting ? toViewController : fromViewController;
if (isPresenting) {
[transitionView addSubview:navigator.view];
navigator.view.transform = CGAffineTransformMakeScale(0.1, 0.1);
navigator.view.alpha = 0;
}
navigator.view.center = self.startButton.center;
void(^AnimationBlock)(void) = ^ {
if (isPresenting) {
navigator.view.transform = CGAffineTransformMakeScale(1, 1);
self.view.transform = CGAffineTransformMakeScale(4, 4);
navigator.view.alpha = 1;
self.startButton.alpha = 0;
} else {
navigator.view.transform = CGAffineTransformMakeScale(0.1, 0.1);
self.view.transform = CGAffineTransformMakeScale(1, 1);
navigator.view.alpha = 0;
self.startButton.alpha = 1;
}
};
[UIView animateWithDuration:1
delay:0.0f
usingSpringWithDamping:50.0
initialSpringVelocity:4
options:UIViewAnimationOptionLayoutSubviews
animations:^{
AnimationBlock();
} completion:^(BOOL finished) {
[transitionContext completeTransition:YES];
if (!isPresenting) {
[navigator.view removeFromSuperview];
}
}];
}
- (void)completeTransitionInContext:(id<UIViewControllerContextTransitioning>)transitionContext{
[transitionContext completeTransition:YES];
}
- (NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext{
return 1;
}
- (id <UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController:(UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source {
return self;
}
- (id <UIViewControllerAnimatedTransitioning>)animationControllerForDismissedController:(UIViewController *)dismissed {
return self;
}
请告诉我是否应该提供一些额外的代码或屏幕。 提前致谢!
【问题讨论】:
-
iOS 7 API 仍处于保密协议下,直到公开发布(9 月 18 日)
-
我有一个非常相似的问题,iOS7 API 不再处于 NDA 之下...您能解释一下如何解决它吗?谢谢!
-
还是不知道答案:(
标签: ios objective-c iphone ios7