Анимация на CALayer в UIView отменяется при анимации UIView - PullRequest
0 голосов
/ 28 августа 2018

Я новичок в 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 (растяжение, затухание, перемещение и т. Д.)

Заранее спасибо за любую помощь!

...