Быстрая маска слоя круга над 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)
вместо слоя представления.
Маска должна быть подслой слоя, который она хочет замаскировать.