【问题标题】: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 及更高版本。

【问题讨论】:

  • 你想用这个子视图做什么?
  • 所以,为了清楚起见,您不能更改 z 位置?

标签: 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

【讨论】:

  • 这就是我自己考虑的解决方案。干杯!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多