我有一个自定义 Storyboard转场动画,但它没有按照我想要的方式显示。我希望它“推开”当前 View Controller 及其旁边的新 View Controller ,而不是“删除” View Controller 。 (不像推送转场,更像是在照片应用程序中滑动照片时看到的效果)。有任何想法吗?谢谢。
- (void)perform {
UIViewController *currentViewController = self.sourceViewController;
UIViewController *newViewController = self.destinationViewController;
[currentViewController.view addSubview:newViewController.view];
newViewController.view.transform = CGAffineTransformMakeScale(0.05, 0.05);
CGPoint originalCenter = newViewController.view.center;
newViewController.view.center = self.originatingPoint;
[UIView animateWithDuration:1.9
delay:0.0
options:UIViewAnimationOptionCurveEaseInOut
animations:^{
newViewController.view.transform = CGAffineTransformMakeScale(1.0, 100.0);
newViewController.view.center = originalCenter;
}
completion:^(BOOL finished){
[newViewController.view removeFromSuperview]; // remove from temp super view
[currentViewController presentViewController:newViewController animated:NO completion:NULL]; // present VC
}];
}
最佳答案
animations:^{
newViewController.view.transform = CGAffineTransformMakeScale(1.0, 100.0);
newViewController.view.center = originalCenter;
}
看起来您没有为当前 View Controller 的 View 设置动画。我也不确定您为什么要设置新 View Controller View 的转换。我希望您的代码看起来像这样:
CGPoint originalCenter = currentViewController.view.center;
CGPoint newCurrentVCCenter = CGPointMake(currentViewController.view.center.x - screenWidth, currentViewController.center.y);
[UIView animateWithDuration:1.9
delay:0.0
options:UIViewAnimationOptionCurveEaseInOut
animations:^{
currentViewController.center = newCurrentVCCenter;
newViewController.view.center = originalCenter;
}
completion:^(BOOL finished){
// clean up here
}];
换句话说,您正在移动 currentViewController.view
和 newViewController.view
,以便当前 View 和新 View 都向左移动相同的量,并且在同一时间。
关于ios - 自定义 Storyboard转场,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22920167/