UIView 上的圆形图层的 Swift 掩码

Posted

技术标签:

【中文标题】UIView 上的圆形图层的 Swift 掩码【英文标题】:Swift mask of circle layer over UIView 【发布时间】:2015-03-20 18:09:19 【问题描述】:

我正在尝试通过圆形 CAShapeLayer 快速掩盖方形 UIView。我有以下内容:

    var snapFrame = self.snapButton.frame
    var innerFrame = CGRect(x: snapFrame.minX + 1, y: snapFrame.minY + 1, width: snapFrame.width - 2, height: snapFrame.height - 2)

    maskLayer = CAShapeLayer()
    var circlePath = UIBezierPath(roundedRect: innerFrame, cornerRadius: innerFrame.width)
    maskLayer.path = circlePath.CGPath
    maskLayer.fillColor = UIColor.clearColor().CGColor

    shutterOverlay = UIView()
    shutterOverlay.frame = innerFrame
    shutterOverlay.backgroundColor = BUBConstants.primaryColor_blue

    self.view.addSubview(shutterOverlay)
    self.view.layer.addSublayer(maskLayer)

    shutterOverlay.layer.mask = maskLayer

如果我注释掉最后两行,图层和视图都会出现在正确的位置和正确的大小。但是,添加最后一行会导致视图和图层都不会显示。

另外,我需要这样做,因为我的最终目标是制作一个方形 UIView 填满圆圈的动画。我不能只显示一个圆形视图。

谁能指出我哪里出错了?

【问题讨论】:

【参考方案1】:

你需要像这样将遮罩添加到shutterOverlay

shutterOverlay.layer.addSublayer(maskLayer)

而不是视图的层。

遮罩必须是要遮罩的图层的子图层。

【讨论】:

以上是关于UIView 上的圆形图层的 Swift 掩码的主要内容,如果未能解决你的问题,请参考以下文章

UIView 层不随视图调整大小?

CALayer图层的基本介绍

ps:图层的选择

图层和视图层的知识总结

如何更新 UIView 的图层属性并为其子视图保留图层?

iOS - 带有图层的 UIScrollVIew