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.
Не могу понять в чем дело. Заранее спасибо за помощь
Подтверждаю несоответствие поведению, указанному в документации к 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
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP