我正在使用UISplitViewController
构建一个应用程序作为我的根视图控制器(由Apple规定)。但是,我需要在UISplitViewController
之前显示登录/管理的自定义视图,因此我创建了一个自定义UIStoryboardSegue
来调用一些自定义动画。我试图通过模态segue重新创建push / pop
segues,而不是实际推送一个弹出的视图控制器。我已经正确地实现了一切,但是,在动画结束时我有一个闪烁。这是它的gif:
这是我的自定义Segue的代码:
- (void)perform {
UIViewController *srcViewController = (UIViewController *) self.sourceViewController;
UIViewController *destViewController = self.destinationViewController;
UIView *prevView = srcViewController.view;
UIView *destView = destViewController.view;
UIWindow *window = [[[UIApplication sharedApplication] delegate] window];
[window insertSubview:destView aboveSubview:prevView];
[destView enterRight:0.1 then:^{
[destView removeFromSuperview];
[srcViewController.presentingViewController dismissViewControllerAnimated: NO completion:nil];
}];
}
这是我的自定义动画(在UIView
上实现的类别):
-(void)enterRight:(float)delay then:(void(^)(void))after
{
CGPoint moveTo = self.center;
CGPoint moveFrom = self.center;
// Grab a point from off the screen
CGFloat simpleOffscreen = [UIScreen mainScreen].bounds.size.width;
// come from off the right side (+)
moveFrom.x = moveFrom.x + simpleOffscreen;
self.center = moveFrom;
self.hidden = NO;
[UIView animateWithDuration:0.5
delay:delay
usingSpringWithDamping:1
initialSpringVelocity:0.1
options:UIViewAnimationOptionCurveEaseIn
animations:^
{
self.center = moveTo;
}
completion:^(BOOL finished)
{
if (after) after();
}
];
}
正如你在Segue中看到的那样,我将视图设置为当前视图控制器的动画,然后没有动画呈现实际的目标视图控制器。我认为这是引入闪烁的地方,但我不确定如何防止这种情况发生。
此自定义segue的故事板为
任何人都知道如何实现这个目标?