gpt4 book ai didi

ios - 包含多个禁用的 UIScrollView 控件的 UIScrollView 滞后。为什么?

转载 作者:行者123 更新时间:2023-11-29 12:44:01 25 4
gpt4 key购买 nike

在我的 iPad 应用程序中,我有一个包含大量 UISwitch 元素的 UIScrollView。可以根据组状态启用/禁用其中一组(大约 12 个)。

当组状态为“已启用”并且我将 UISwitch enabled 属性设置为 YES 时,整个 ScrollView 会自然滚动。当我将 UISwitch enabled 属性设置为 NO 时,UIScrollView 在滚动时会滞后和断断续续。

我像这样启用/禁用十二个 UISwitch:

[self.switchOneOutlet setEnabled:NO];

[self.switchOneOutlet setEnabled:YES];

(当然,switchOneOutlet 的命名更符合每个开关的描述。)

注意:我正在使用自动布局,但我已经测试过它是否有任何效果,但没有。这似乎与位于 UIScrollView 中的 UISwitch 元素的启用状态严格相关。我认为这不是自动布局问题。

当 UISwitches 被禁用时,有什么可能导致这种卡顿的想法吗?

最佳答案

问题是,当开关被禁用时,它们会应用一个 alpha 使它们变灰。这导致它们和它们的 subview 在每一帧都被渲染到屏幕外。 (如果您使用 Core Animation 工具并选中“Color offscreen-rendered yellow”,则可以看到这一点;比较启用和禁用。)这种离屏渲染(每一帧)很昂贵,这也是您遇到性能问题的原因。

最简单的解决方案是要求 Core Animation 在帧之间缓存开关的外观。 (由于它们的外观在滚动时不会改变,这会显着提高性能。)您可以这样做:

mySwitch.layer.shouldRasterize = YES;
mySwitch.layer.rasterizationScale = [[UIScreen mainScreen] scale];

请注意,如果开关本身在外观上没有变化,则此缓存只会加快速度。在允许用户与这些开关交互之前,您可能希望将 shouldRasterize 设置为 NO。 (所以,也许当他们开始滚动时打开它,当他们停止滚动时禁用它?您可能只需要尝试一下就可以为您的情况做出正确的权衡。)

关于ios - 包含多个禁用的 UIScrollView 控件的 UIScrollView 滞后。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24098870/

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