【问题标题】:Shadow lagging the user interface阴影滞后于用户界面
【发布时间】:2014-12-05 08:43:55
【问题描述】:

我有大约 15 个视图应用 QuartzCore 阴影,如下所示:

for button in buttonsArray {
    button.layer.shadowOpacity = 0.75
    button.layer.shadowColor = UIColor.blackColor().CGColor
    button.layer.shadowRadius = 2.0
    button.layer.shadowOffset = CGSize(width: 0.4, height: 1.2)
}

当我在 1 个视图中有很多这种阴影时(如本例所示),它真的开始变慢并滞后于用户界面。
我该如何解决它,或者我还有什么其他选择?谢谢!

【问题讨论】:

标签: ios objective-c swift shadow quartz-core


【解决方案1】:

观看 WWDC 2014 视频“iOS 应用的高级图形和动画”。

https://developer.apple.com/videos/wwdc/2014/

35:50 in ... 它讨论了为什么使用这种类型的代码生成阴影会导致 GPU 在计算阴影形状时导致额外的屏幕外通道。

如果您已经知道阴影的形状,建议的解决方案是在图层上也使用shadowPath 属性...

这是一个很棒的视频。

【讨论】:

  • shadowPath 是的方法。
【解决方案2】:

根据按钮的外观,一种想法是为包含阴影的按钮使用背景图像,而不是在代码中添加阴影。您还可以使用resizableImageWithCapInsets 来制作各种可能的按钮尺寸。

UIImage* image = [UIImage imageNamed:@"button.png"];
UIEdgeInsets insets = UIEdgeInsetsMake(16, 6, 16, 6);    // change the insets to fit your needs
image = [image resizableImageWithCapInsets:insets];
[button setBackgroundImage:image forState:UIControlStateNormal];

可在 https://developer.apple.com/library/ios/documentation/uikit/reference/uiimage_class/index.html#//apple_ref/occ/instm/UIImage/resizableImageWithCapInsets: 找到有关 resizableImageWithCapInsets 的文档

此解决方案可能不适合您,具体取决于您的按钮外观。但是使用图像而不是在代码中添加阴影应该可以加快您的代码速度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-19
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多