Я новичок в Swift (и разработке программного обеспечения), так что будьте спокойны, пожалуйста!
Я создал собственный класс для 'шара' (форма пончика), который будет пульсировать анимированно бесконечно:
let layerOne = CAShapeLayer()
let layerTwo = CAShapeLayer()
let layerThree = CAShapeLayer()
override init(frame: CGRect) {
super.init(frame: frame)
setupView()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setupView()
}
private func setupView() {
backgroundColor = UIColor.clear
layerOne.path = UIBezierPath(roundedRect: CGRect(x: 0, y: 0, width: frame.width, height: frame.height), cornerRadius: frame.width/2).cgPath
layerOne.lineWidth = 3
layerOne.strokeColor = UIColor.white.cgColor
layerOne.fillColor = UIColor.clear.cgColor
layer.addSublayer(layerOne)
layerTwo.path = UIBezierPath(roundedRect: CGRect(x: 0, y: 0, width: frame.width, height: frame.height), cornerRadius: frame.width/2).cgPath
layerTwo.fillColor = UIColor.clear.cgColor
layerTwo.lineWidth = 9
layerTwo.opacity = 0.5
layerTwo.strokeColor = UIColor.white.cgColor
layer.addSublayer(layerTwo)
layerThree.path = UIBezierPath(roundedRect: CGRect(x: 0, y: 0, width: frame.width, height: frame.height), cornerRadius: frame.width/2).cgPath
layerThree.fillColor = UIColor.clear.cgColor
layerThree.lineWidth = 15
layerThree.opacity = 0.3
layerThree.strokeColor = UIColor.white.cgColor
layer.addSublayer(layerThree)
animateOrb()
}
func animateOrb() {
let layer3Animation = CABasicAnimation(keyPath: "opacity");
layer3Animation.fromValue = 0
layer3Animation.toValue = 0.3
layer3Animation.duration = 0.25;
layer3Animation.autoreverses = true
layer3Animation.repeatCount = Float.infinity
layerThree.add(layer3Animation, forKey: "opacity");
}
У меня есть UIView на моем контроллере вида, в котором его пользовательский класс установлен на мой класс orbView. UIView начинается с альфа 0, и когда мне это нужно, я делаю его на своем видении с помощью этой функции:
func fade(endAlpha: CGFloat, view: UIView, duration: Double){
UIView.animate(withDuration: duration) {
view.alpha = endAlpha
}
}
Однако может показаться, что анимация моего UIView с помощью этой функции убивает анимацию моего слоя в представлении. Как я могу предотвратить это?
В идеале я бы хотел, чтобы мой анимированный слой в UIView продолжал пульсировать, независимо от того, что происходит с UIView (растяжение, затухание, перемещение и т. Д.)
Заранее спасибо за любую помощь!