Ищете анимацию водителя, например, Uber в Swift - PullRequest
0 голосов
/ 19 октября 2018

Я хочу сделать анимацию, например, когда приложение начинает искать драйверы, когда круг увеличивается и уменьшается.enter image description here

Вот мой код. Я увеличиваю и уменьшаю ширину и высоту круга в автореверсной анимации, но у него есть 2 проблемы:

  1. Не работает, как будто анимация происходит из центра.Его начало и конец от угла.

  2. Радиус круга не остается согласованным.При закрытии он превращается в квадрат

Код:

let duration = 2.0


UIView.animate(withDuration: duration, delay: 0, options: [.repeat, .autoreverse] , animations: {
        let cntr = self.circularView.center
        self.circularView.layer.cornerRadius = min(self.circularView.frame.size.height,self.circularView.frame.size.width)/2
        self.circularView.center = cntr
        self.circularView.frame.size.width = (self.circularView.frame.size.width) * 2
        self.circularView.frame.size.height = (self.circularView.frame.height) * 2

1 Ответ

0 голосов
/ 19 октября 2018

Попробуйте: оставьте угловой радиус за пределами анимации.Анимируйте с помощью преобразования вместо изменения ширины или ограничений.В вашей раскадровке / коде установите положение круговых видов с ограничениями, связанными с центром:

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    self.circularView!.layer.cornerRadius = self.circularView!.frame.width / 2

    UIView.animate(withDuration: 2.0, delay: 0, options: [.repeat, .autoreverse] , animations: {
        self.isZooming = !self.isZooming
        var zoomTransform = CGAffineTransform.identity
        let scale: CGFloat = self.isZooming ? 0.5 : 1.5
        zoomTransform = zoomTransform.scaledBy(x: scale, y: scale)
        self.circularView?.transform = zoomTransform
    })
}

enter image description here enter image description here

...