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();
     }
     ];
}