我寫了一個自定義UIStoryboardSegue
,我正用它來在各種UIViewControllers
之間轉換。動畫按需要工作,大部分時間顯示爲我在模擬器和設備上預期的那樣。如何防止在自定義UIStoryboardSegue結束時出現「閃爍」的視圖?
然而,SEGUE完成後,有時,我可以看到老UIViewController
閃存一秒鐘的UIStoryboardSegue
完成後,一小部分。結果擾亂了我期待的平穩過渡。不幸的是,我無法辨別出這種行爲的任何模式。
我已經包含了一個我正用來管理下面的segue的方法的準系統版本。有一種更可靠的方法來確保平穩過渡?難道我做錯了什麼?同樣,大部分時間賽格看起來都是我想要的。
- (void)perform
{
self.window = [[[UIApplication sharedApplication] delegate] window];
UIViewController *source = (UIViewController *) self.sourceViewController;
UIViewController *dest = (UIViewController *) self.destinationViewController;
[self.window insertSubview:dest.view.window belowSubview:source.view];
self.segueLayer = [CALayer layer];
// Create and add a number of other CALayers for displaying the segue,
// adding them to the base segueLayer
// Create and add CAAnimations for animating the CALayers
// (code omitted for the sake of space)
[self.window addSubview:dest.view];
[self.window.layer addSublayer:self.segueLayer];
[source.view removeFromSuperview];
}
- (void)animationDidStop:(CAAnimation *)animation finished:(BOOL)isFinished
{
UIViewController *source = (UIViewController *) self.sourceViewController;
UIViewController *dest = (UIViewController *) self.destinationViewController;
if (isFinished)
{
// Remove and deallocate the CALayers previously created
[self.segueLayer removeFromSuperlayer];
self.segueLayer = nil;
self.window.rootViewController = dest;
}
}
我正在嘗試的一個建議是:爲所有CAAnimation實例設置'removedOnCompletion = NO'和'fillMode = kCAFillModeForwards'。也許他們正在重置。 –