Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 触摸功能计时器_Swift_Touch_Touchesbegan - Fatal编程技术网

Swift 触摸功能计时器

Swift 触摸功能计时器,swift,touch,touchesbegan,Swift,Touch,Touchesbegan,我想有一个应用程序,当你的手指触摸时检测。如果应用程序检测到屏幕被点击,我想在该位置放置一个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: UIIm

我想有一个应用程序,当你的手指触摸时检测。如果应用程序检测到屏幕被点击,我想在该位置放置一个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
        }
    }
var用户=0
@IBVAR人员1:UIImageView!
@IBVAR人员2:UIImageView!
@IBVAR人员3:UIImageView!
@IBVAR人员4:UIImageView!
@IBVAR人员_5:UIImageView!
var fingers=[String?](重复:nil,计数:5)
覆盖func TouchesBegind(Touchs:Set,带有事件:UIEvent?){
super.touchesbeated(touches,with:event)
接触{
让点=触摸位置(在:self.view中)
用于手指中的(食指、手指)。枚举(){
如果finger==nil{
手指[索引]=字符串(格式:“%p”,触摸)
打印(“手指\(索引+1):x=\(点x),y=\(点y)”)
如果索引==0{
Person_1.center=CGPoint(x:point.x,y:point.y)
Person_1.ishiden=错误
用户=1
}
如果索引=1{
Person_2.center=CGPoint(x:point.x,y:point.y)
Person_2.ishiden=错误
用户=2
}
如果索引=2{
Person_3.center=CGPoint(x:point.x,y:point.y)
Person_3.ishiden=错误
用户=3
}
如果索引=3{
Person_4.center=CGPoint(x:point.x,y:point.y)
Person_4.ishiden=错误
用户=4
}
如果索引=4{
Person_5.center=CGPoint(x:point.x,y:point.y)
Person_5.ishiden=错误
用户=5
}
打印(“用户:\(用户)”)
打破
}
}
}
检查用户()
}
func check_users(){
如果用户==5{
设timer=timer.scheduledTimer(时间间隔:5.0,目标:self,选择器:#选择器(self.choosewinner4),userInfo:nil,repeats:false)
}
如果用户==4{
设timer=timer.scheduledTimer(时间间隔:5.0,目标:self,选择器:#选择器(self.choosewinner3),userInfo:nil,repeats:false)
}
如果用户==3{
设timer=timer.scheduledTimer(时间间隔:5.0,目标:self,选择器:#选择器(self.choosewinner2),用户信息:nil,重复:false)
}
如果用户==2{
设timer=timer.scheduledTimer(时间间隔:5.0,目标:self,选择器:#选择器(self.choosewinner1),userInfo:nil,repeats:false)
}
}
@objc func choosewinner1(){
设diceRoll1=Int(arc4random_均匀(2)+1)
打印(1)
如果1==1{
Person_1.ishiden=真
}
如果1==2{
Person_2.ishiden=真
}
}

每次新用户触摸屏幕时,users Int将计数为users Int中的1个用户。我有一个函数,当用户数量为x时,它将检查需要执行的操作,称为“check_users()”。这个代码的问题是,如果你用两个人触摸屏幕,那么用户Int将是2。如果您用3个人触摸屏幕,用户Int将是前2个,通过check_users()函数,然后通过check_users()函数,用户Int=3。我希望应用程序在使用最终的users Int值通过users_check()函数之前等待几秒钟。有人知道怎么做吗?

您可以使用延迟执行选择器的方法。要在延迟使用后调用方法,请执行以下操作:

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)
    ...
}
override func touchsbegind(touch:Set,带有事件:UIEvent?){
super.touchesbeated(touches,with:event)
NSObject.cancelPreviousPerformRequests(目标:self)
...
}