Быстрая маска слоя круга над UIView

Я пытаюсь замаскировать квадратный UIView круговым CAShapeLayer в быстром. У меня есть следующее:

    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 ответ

Решение

Вам нужно добавить маску на оверлей shutter, как это

shutterOverlay.layer.addSublayer(maskLayer)

вместо слоя представления.

Маска должна быть подслой слоя, который она хочет замаскировать.

Другие вопросы по тегам