У меня есть вид с .brown
backgroundColor
.
. В этом виде у меня есть backgroundView
, который имеет backgroundColor: UIColor.black.withAlphaComponent(0.5)
.
. Затем я хочу иметь прозрачныйполе в этом backgroundView
, которое показывает подстилающий вид.И я достиг этого, но я не могу сделать это, анимируя его прозрачность, мой код только увеличивает «вырезанную область» до желаемого размера, а не анимирует его прозрачность.
Коричневый вид с backgroundView и его0,5 альфа
Добавленный слой к backgroundView показывает часть коричневого представления
Код, который я написал, чтобы получитьто, что у меня сейчас есть, это:
func addIndicatorTo(global frame: CGRect) {
let shape = CAShapeLayer()
let targetRect = convert(frame, from: nil).insetBy(dx: -4, dy: -4)
let animation = CABasicAnimation(keyPath: "path")
let toPath = CGMutablePath()
toPath.addRect(bounds)
toPath.addPath(UIBezierPath(roundedRect: targetRect,
byRoundingCorners: .allCorners,
cornerRadii: CGSize(width: 4, height: 4)).cgPath)
toPath.closeSubpath()
let fromPath = CGMutablePath()
fromPath.addRect(bounds)
fromPath.addPath(UIBezierPath(roundedRect: targetRect.insetBy(dx: targetRect.width / 2,
dy: targetRect.height / 2),
byRoundingCorners: .allCorners,
cornerRadii: CGSize(width: 4, height: 4)).cgPath)
fromPath.closeSubpath()
animation.fromValue = fromPath
animation.toValue = toPath
animation.duration = 0.5
shape.fillRule = .evenOdd
shape.path = animation.fromValue as! CGPath
backgroundView.layer.mask = shape
shape.add(animation, forKey: nil)
CATransaction.begin()
CATransaction.setDisableActions(true)
shape.path = toPath
CATransaction.commit()
}