Xcode ждет завершения анимации перед выполнением следующего задания - PullRequest
0 голосов
/ 05 марта 2019

У меня есть слой, который перемещается вверх, когда я провожу пальцем вверх, а затем тот же слой перемещается вниз, когда я провожу пальцем вниз.

Когда я провожу пальцем вверх, я не хочу, чтобы пользователь имел возможность провести пальцем внизактивировать эту анимацию до тех пор, пока анимация смахивания не будет завершена, и наоборот.

Как мне это сделать?Я попытался отключить жест смахивания, используя «isEnabled», но не игра в костиНа некоторые другие подобные вопросы есть ответы, которые были сделаны очень давно, и их синтаксис сильно отличается.Я использую последнюю версию xcode.

Я относительно новичок в xcode, поэтому прошу прощения за недостаток информации об этом.Если у вас есть вопросы, дайте мне знать.

Спасибо!

1 Ответ

0 голосов
/ 05 марта 2019

Эту проблему можно решить, добавив логическую переменную IF Statement вместе с функцией DispatchQueue, чтобы предотвратить появление другой анимации, пока текущая анимация не завершится.

См. Ниже и, пожалуйста, upvote, если это вообще помогло:)

import UIKit
var animation_active = false
let animation_duration = 2 //For easy maintenance

func swipe_down() {
    if animation_active == false {
        animation_active == true
        //Animation code goes here. Variable 'animation_active' should be used when performing the animation for easy matinence
        DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(animation_duration), execute: {
            animation_active = false
        })
    }
}


func swipe_up() { //This is exactly the same as swipe_up. Yet it will prevent the swipe animation from occuring when the swipe down animation is occuruing thanks to the variable 'animation_active'
    if animation_active == false {
        animation_active == true
        //Animation code goes here. Variable 'animation_active' should be used when performing the animation for easy matinence
        DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(animation_duration), execute: {
            animation_active = false
        })
    }
}
...