Ios 自定义连续动画闪烁
我正在使用Ios 自定义连续动画闪烁,ios,objective-c,animation,uistoryboardsegue,Ios,Objective C,Animation,Uistoryboardsegue,我正在使用UISplitViewController作为我的根视图控制器构建一个应用程序(如苹果所规定)。但是,我需要在UISplitViewController之前显示登录/管理的自定义视图,因此我创建了一个自定义UIStoryboardSegue,它调用一些自定义动画。我试图通过模式序列重新创建push/popsegue,而不实际推动弹出视图控制器。我已经正确地实现了一切,但是,在动画结束时,我有一个闪烁。下面是它的gif: 以下是我的自定义Segue代码: - (void)perform
UISplitViewController
作为我的根视图控制器构建一个应用程序(如苹果所规定)。但是,我需要在UISplitViewController
之前显示登录/管理的自定义视图,因此我创建了一个自定义UIStoryboardSegue
,它调用一些自定义动画。我试图通过模式序列重新创建push/pop
segue,而不实际推动弹出视图控制器。我已经正确地实现了一切,但是,在动画结束时,我有一个闪烁。下面是它的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
上作为一个类别实现):
正如您在序列中所看到的,我正在将视图设置为当前视图控制器的动画,然后没有显示实际目标视图控制器的动画。我想这就是闪变的原因,但我不确定如何防止闪变
我的这个自定义序列的故事板是
有人知道如何实现吗?这是您真正的代码吗?您可以在destView上调用enterRight:then:on,但应该在self上调用它(假设您发布的所有代码都在segue类中)。同样在enterRight:then:,您有self.center——segue没有center属性。请澄清。
enterRight
是UIView
上的一个类别,因此我可以在其他视图上重用此动画。在enterRight
中,self
指的是UIView
,而不是UIStoryboardSegue
。您如何(从何处)启动此自定义segue?我在应用程序启动时以编程方式触发它,当UISplitViewController
实例化时,以及通过UISplitViewController
视图控制器之一中的iAction
<代码>[splitViewController PerformsgueWithIdentifier:@“identifier”发送者:self]在应用程序启动时,您使用什么方法触发segue?您是从应用程序委托还是从子类拆分视图控制器内部执行此操作?
-(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();
}
];
}