CAReplicatorLayer остановить и исчезнуть? - PullRequest
0 голосов
/ 25 марта 2020

У меня проблема с "деактивацией" анимации.

Я хочу полностью остановить анимацию и отключить ее, пока я не вызову функцию startBusy () снова. Даже когда я устанавливаю opaticy на 0, у меня все еще остается одна точка.

Нужно ли мне удалять весь слой из области просмотра и добавлять его снова, если я хочу снова aniamte? Что будет правильным заданием?

class BusyAnimation: CALayer {

var segmentCount = 10
var size = CGRect(x: 0, y: 0, width: 50, height: 50)

let replicator = CAReplicatorLayer()
let circle = CALayer()

func startBusy(){

    replicator.frame = size
    replicator.instanceCount = segmentCount
    replicator.instanceDelay = 2/CFTimeInterval(segmentCount)
    let angle = CGFloat.pi  * 2 / CGFloat(segmentCount)
    replicator.instanceTransform = CATransform3DMakeRotation(angle, 0, 0, 1)
    replicator.speed = 1
    replicator.opacity = 1
    replicator.repeatCount = Float.infinity

    circle.frame = CGRect(x: 0, y: 0, width: 5, height: 5)
    circle.cornerRadius = 2.5
    circle.backgroundColor = UIColor.gray.cgColor
    circle.opacity = 1
    circle.speed = 1

    let fade = CABasicAnimation(keyPath: "opacity")
    fade.fromValue = 1
    fade.toValue = 0
    fade.duration = 2
    fade.repeatCount = 1000

    circle.add(fade, forKey: "fade")

    replicator.addSublayer(circle)

    self.addSublayer(replicator)
}

func stopBusy(){
    replicator.opacity = 0
    replicator.speed = 0
    circle.opacity = 0
    circle.speed = 0
}

}
...