gpt4 book ai didi

ios - 如何在自定义 UIStoryboardSegue 的末尾防止从 "flashing"开始查看?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:19:53 25 4
gpt4 key购买 nike

我编写了一个自定义的 UIStoryboardSegue,我用它在各种 UIViewControllers 之间进行转换。动画按预期工作,大部分时间 UIStoryboardSegue 在模拟器和设备上都按照我的预期显示。

但是,有时在 segue 完成后,我可以在 UIStoryboardSegue 完成后的几分之一秒内看到旧的 UIViewController flash。结果打乱​​了我期待的平稳过渡。不幸的是,我无法辨别这种行为的任何模式。

我在下面包含了我用来管理 segue 的方法的准系统版本。是否有更可靠的方法来确保平稳过渡?难道我做错了什么?同样,大部分时间 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;
}
}

最佳答案

因此 CAAnimations 不会更改实际层的值,但会更改其关联的 presentationLayer 的值。将 fillMode 设置为 kCAFillModeForwards 可确保 presentationLayer 的值在动画完成后不会恢复。但是,如果动画的 removedOnCompletion 属性设置为 YES(默认设置),图层的外观也可以恢复到其动画前的状态。

由于 animationDidStop: 回调可能会在任何潜在的回滚之后被调用,并且由于时间不准确,这可以解释为什么您并不总是看到回滚。

关于ios - 如何在自定义 UIStoryboardSegue 的末尾防止从 "flashing"开始查看?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12443671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com