Таймер для прикосновений - PullRequest
0 голосов
/ 24 апреля 2018

Я хочу иметь приложение, которое определяет, когда ваш палец касается. Если приложение обнаруживает, что на экране нажимают, я хочу разместить UIImage на этом месте. Это приложение должно иметь несколько пользователей. У меня есть это до сих пор:

var users = 0
@IBOutlet weak var Person_1: UIImageView!
@IBOutlet weak var Person_2: UIImageView!
@IBOutlet weak var Person_3: UIImageView!
@IBOutlet weak var Person_4: UIImageView!
@IBOutlet weak var Person_5: UIImageView!
var fingers = [String?](repeating: nil, count:5)

   override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        super.touchesBegan(touches, with: event)
        for touch in touches{
            let point = touch.location(in: self.view)
            for (index,finger)  in fingers.enumerated() {
                if finger == nil {
                    fingers[index] = String(format: "%p", touch)
                    print("finger \(index+1): x= \(point.x) , y= \(point.y)")
                    if index == 0 {
                        Person_1.center = CGPoint(x: point.x , y: point.y)
                        Person_1.isHidden = false
                        users = 1
                    }
                    if index == 1 {
                        Person_2.center = CGPoint(x: point.x , y: point.y)
                        Person_2.isHidden = false
                        users = 2
                    }
                    if index == 2 {
                        Person_3.center = CGPoint(x: point.x , y: point.y)
                        Person_3.isHidden = false
                        users = 3
                    }
                    if index == 3 {
                        Person_4.center = CGPoint(x: point.x , y: point.y)
                        Person_4.isHidden = false
                        users = 4
                    }
                    if index == 4 {
                        Person_5.center = CGPoint(x: point.x , y: point.y)
                        Person_5.isHidden = false
                        users = 5
                    }
                    print("Users: \(users)")
                    break
                }
            }
        }
        check_users()
    }
    func check_users(){
        if users == 5 {
            let timer = Timer.scheduledTimer(timeInterval: 5.0, target: self, selector: #selector(self.choosewinner4), userInfo: nil, repeats: false)
        }
        if users == 4 {
            let timer = Timer.scheduledTimer(timeInterval: 5.0, target: self, selector: #selector(self.choosewinner3), userInfo: nil, repeats: false)
        }
        if users == 3 {
            let timer = Timer.scheduledTimer(timeInterval: 5.0, target: self, selector: #selector(self.choosewinner2), userInfo: nil, repeats: false)
        }
        if users == 2 {
            let timer = Timer.scheduledTimer(timeInterval: 5.0, target: self, selector: #selector(self.choosewinner1), userInfo: nil, repeats: false)
        }
    }

@objc func choosewinner1(){
        let diceRoll1 = Int(arc4random_uniform(2) + 1)
        print(diceRoll1)
        if diceRoll1 == 1 {
            Person_1.isHidden = true
        }
        if diceRoll1 == 2{
            Person_2.isHidden = true
        }
    }

Каждый раз, когда новый пользователь касается экрана, пользователи Int будут считать 1 пользователя на пользователя Int. У меня есть функция, которая будет проверять, что нужно делать, когда у вас есть x количество пользователей, и называется «check_users ()». Проблема этого кода заключается в том, что если вы дотронетесь до экрана с двумя людьми, Int пользователей будет 2. Если вы коснетесь экрана с 3 людьми, пользователи Int будут первыми 2 и пройдут через функцию check_users (), а затем Пройдите через функцию check_users () для пользователей Int = 3. Я хочу, чтобы приложение подождало несколько секунд, прежде чем оно пройдет через функцию users_check () с конечным значением Int для пользователей. Кто-нибудь знает, как это сделать?

1 Ответ

0 голосов
/ 24 апреля 2018

Вы можете использовать методы для выполнения селектора с задержкой.Для вызова метода после задержки используйте:

perform(#selector(check_users), with: nil, afterDelay: 1)

Чтобы отменить все предыдущие запросы, которые не были выполнены:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    super.touchesBegan(touches, with: event)
    NSObject.cancelPreviousPerformRequests(withTarget: self)
    ...
}
...