将子视图添加到 self.view 但让某些子视图内容不被添加的子视图覆盖

Posted

技术标签:

【中文标题】将子视图添加到 self.view 但让某些子视图内容不被添加的子视图覆盖【英文标题】:Add subview to self.view but let certain subviews content not be covered by the added subview 【发布时间】:2016-02-20 17:10:46 【问题描述】:

我想向 self.view 添加一个覆盖整个区域的子视图(如调光视图)。但在它下面有一些视图我不想受到添加的子视图的影响(我不希望这些视图有暗淡的效果)。这可以吗?

我知道有一个“简单”的解决方案;将那些我不想受到影响的子视图移到前面(在添加的子视图上),但这对我有不良影响,所以我不能使用该解决方案。

我的目标是 ios 8 及更高版本。

【问题讨论】:

你想用这个子视图做什么? 所以,为了清楚起见,您不能更改 z 位置? 【参考方案1】:

您需要考虑创建一个CALayer mask 以从您的视图上方的图层中减去下方的子视图框架。

var path = UIBezierPath(rect: topView.frame)

var subviewPath1 = UIBezierPath(rect: subview1.frame)
var subviewPath2 = UIBezierPath(rect: subview2.frame)
path.usesEvenOddFillRule = true
path.appendPath(subviewPath1)
path.appendPath(subviewPath2)

var maskLayer = CAShapeLayer()
maskLayer.path = path.CGPath
maskLayer.fillRule = kCAFillRuleEvenOdd
maskLayer.fillColor = UIColor.whiteColor().CGColor

topView.layer.mask = maskLayer

【讨论】:

这就是我自己考虑的解决方案。干杯!

以上是关于将子视图添加到 self.view 但让某些子视图内容不被添加的子视图覆盖的主要内容,如果未能解决你的问题,请参考以下文章

将子视图添加到 SKStoreProductViewController

何时将子视图从情节提要添加到超级视图?

将子视图添加到 UICollectionViewCell 时出现意外行为

iOS - 将子视图添加到子视图控制器视图

从另一个方法将子视图添加到子视图

仅将子视图添加到当前视图的 UINavigationBar