NSTimer - 如何延迟 Swift
NSTimer - how to delay in Swift
我在游戏中延迟计算机移动时遇到问题。
我找到了一些解决方案,但它们对我的情况不起作用,例如
var delay = NSTimer.scheduledTimerWithTimeInterval(4, target: self, selector: nil, userInfo: nil, repeats: false)
我尝试将其与函数 fire
一起使用,但也没有效果。
还有哪些可能性?
使用 Grand Central Dispatch 怎么样?
Valfer 向您展示了如何
Swift 3
有 GCD:
let delayInSeconds = 4.0
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + delayInSeconds) {
// here code perfomed with delay
}
或使用计时器:
func myPerformeCode() {
// here code to perform
}
let myTimer : Timer = Timer.scheduledTimer(timeInterval: 4, target: self, selector: #selector(self.myPerformeCode), userInfo: nil, repeats: false)
Swift 2
有 GCD:
let seconds = 4.0
let delay = seconds * Double(NSEC_PER_SEC) // nanoseconds per seconds
let dispatchTime = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
dispatch_after(dispatchTime, dispatch_get_main_queue(), {
// here code perfomed with delay
})
或使用计时器:
func myPerformeCode(timer : NSTimer) {
// here code to perform
}
let myTimer : NSTimer = NSTimer.scheduledTimerWithTimeInterval(4, target: self, selector: Selector("myPerformeCode:"), userInfo: nil, repeats: false)
在swift中我们可以使用Dispatch_after.
延迟
SWift 3.0 :-
DispatchQueue.main.asyncAfter(deadline: .now()+4.0) {
alert.dismiss(animated: true, completion: nil)
}
和Swift4.2
使用Timer
可以避免使用选择器,而是使用闭包:
Timer.scheduledTimer(withTimeInterval: 1.0, repeats: false) { (nil) in
// Your code here
}
请记住,Timer
是免费桥接 CFRunLoopTimer
,并且 运行 循环和 GCD 是两种完全不同的方法.... e
我在游戏中延迟计算机移动时遇到问题。
我找到了一些解决方案,但它们对我的情况不起作用,例如
var delay = NSTimer.scheduledTimerWithTimeInterval(4, target: self, selector: nil, userInfo: nil, repeats: false)
我尝试将其与函数 fire
一起使用,但也没有效果。
还有哪些可能性?
使用 Grand Central Dispatch 怎么样?
Valfer 向您展示了如何
Swift 3
有 GCD:
let delayInSeconds = 4.0
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + delayInSeconds) {
// here code perfomed with delay
}
或使用计时器:
func myPerformeCode() {
// here code to perform
}
let myTimer : Timer = Timer.scheduledTimer(timeInterval: 4, target: self, selector: #selector(self.myPerformeCode), userInfo: nil, repeats: false)
Swift 2
有 GCD:
let seconds = 4.0
let delay = seconds * Double(NSEC_PER_SEC) // nanoseconds per seconds
let dispatchTime = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
dispatch_after(dispatchTime, dispatch_get_main_queue(), {
// here code perfomed with delay
})
或使用计时器:
func myPerformeCode(timer : NSTimer) {
// here code to perform
}
let myTimer : NSTimer = NSTimer.scheduledTimerWithTimeInterval(4, target: self, selector: Selector("myPerformeCode:"), userInfo: nil, repeats: false)
在swift中我们可以使用Dispatch_after.
SWift 3.0 :-
DispatchQueue.main.asyncAfter(deadline: .now()+4.0) {
alert.dismiss(animated: true, completion: nil)
}
和Swift4.2
使用Timer
可以避免使用选择器,而是使用闭包:
Timer.scheduledTimer(withTimeInterval: 1.0, repeats: false) { (nil) in
// Your code here
}
请记住,Timer
是免费桥接 CFRunLoopTimer
,并且 运行 循环和 GCD 是两种完全不同的方法.... e