【问题标题】:Add subview to self.view but let certain subviews content not be covered by the added subview将子视图添加到 self.view 但让某些子视图内容不被添加的子视图覆盖
【发布时间】:2016-02-20 17:10:46
【问题描述】:
我想向 self.view 添加一个覆盖整个区域的子视图(如调光视图)。但在它下面有一些视图我不想受到添加的子视图的影响(我不希望这些视图有暗淡的效果)。这可以吗?
我知道有一个“简单”的解决方案;将那些我不想受到影响的子视图移到前面(在添加的子视图上),但这对我有不良影响,所以我不能使用该解决方案。
我的目标是 iOS 8 及更高版本。
【问题讨论】:
标签:
ios
swift
cocoa-touch
uiview
【解决方案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