TransWikia.com

Не правильно работает анимация UIView

Stack Overflow на русском Asked by Hrayr on December 28, 2021

Писал змейку. Согласно документации, при длительности анимации <=0, анимации не происходит. Но она анимируется.

let dur = abroad ? -1 : speed
UIView.animate(withDuration: dur) {
        for i in 0..<(self.snakes.count - 1) {
            let snake = self.snakes[self.snakes.count - i - 2]
            let temp = oldFrame
            oldFrame = snake.frame
            snake.frame = temp
            if snake.frame.intersects(main.frame) {
                self.gameOver = true
                print("game over!!!!!")
            }
        }
        if self.abroad {
            print(dur) // -1
        }
    }

Причем когда делаю вот так

var dur:TimeInterval = 0

анимации нету, а когда вот так:

var dur:TimeInterval = 0
if !abroad {
    dur = TimeInterval(speed)
}

анимация происходит и тогда, когда abroad == false.
Не могу понять в чем дело. Заранее спасибо за помощь

One Answer

Подтверждаю несоответствие поведению, указанному в документации к animate(withDuration:animations:) по крайней мере при проверке на iOS 13.5

duration

The total duration of the animations, measured in seconds. If you specify a negative value or 0, the changes are made without animating them.

В следующем примере анимация происходит при значении меньше нуля, но ее нет при значении равном нулю (let duration: TimeInterval = 0)

Решение: использовать 0 для отключения анимации

class ViewController: UIViewController {
    
    @IBOutlet var label: UILabel!

    @IBAction func buttonTouchUpInside(_ sender: UIButton) {
        let duration: TimeInterval = -1 // assign 0 to disable animation
        
        UIView.animate(withDuration: duration) {
            self.label.frame = self.label.frame.offsetBy(dx: 0, dy: 300)
        }
    }
    
}

Answered by schmidt9 on December 28, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP