【问题标题】:How to make a UIView's subviews' alpha change according to it's parent's alpha?如何根据父视图的 alpha 更改 UIView 的子视图的 alpha?
【发布时间】:2014-08-06 20:44:45
【问题描述】:

我在设置一些子视图的 alpha 时遇到问题。

使用 Storyboard,我的视图控制器中有一个 UIView、viewAsubView1subView2subView3 作为 viewA 内的子视图。

当我将viewA 的 alpha 更改为 0.5 时,viewA 的 alpha 会发生变化,但它的子视图的 alpha 保持不变。

默认情况下,它的子视图的 alpha 不应该根据它的父母而改变吗?我究竟做错了什么?

【问题讨论】:

    标签: ios uiview storyboard


    【解决方案1】:

    给你:

    self.view.layer.allowsGroupOpacity = YES; 
    

    这将适用于所有子视图、子视图的子视图等等。

    来自文档:

     * The default value of the property is read from the boolean
     * UIViewGroupOpacity property in the main bundle's Info.plist. If no
     * value is found in the Info.plist the default value is YES for
     * applications linked against the iOS 7 SDK or later and NO for
     * applications linked against an earlier SDK. */
    

    您的项目可能未链接到 iOS 7 SDK。如果您希望此更改适用于所有视图,我会这样做:

    • 转到您的 .plist
    • 添加一个标题为“Renders with group opacity”的行
    • 设置为是

    来自 Apple 的文档:

    UIViewGroupOpacity
    “Renders with group opacity”
    Specifies whether Core Animation layers inherit the opacity of their superlayer. See “UIViewGroupOpacity” for details.
    iOS 3.0 and later
    

    【讨论】:

      【解决方案2】:

      subView1.alpha = subView1.superview.alpha 呢?

      【讨论】:

        【解决方案3】:

        【讨论】:

          【解决方案4】:

          看看allowsGroupOpacity,可以在图层上设置。还有一个全局 info.plist 键用于在应用范围内更改此行为。

          当 UIViewGroupOpacity 键不存在时,默认值为 现在是的。以前的默认值为 NO。

          这意味着透明视图的子视图将首先被 合成到那个透明视图上,然后是预合成的子树 将作为一个整体绘制到背景上。 NO 设置会导致 更便宜,但也不太准确,合成:每个视图 透明子树被合成到它下面的东西上,根据 到父级的不透明度,按照正常的画家算法顺序

          https://developer.apple.com/library/ios/releasenotes/General/RN-iOSSDK-7.0/index.html

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-03-24
            • 2012-01-24
            • 1970-01-01
            • 1970-01-01
            • 2012-01-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多