2.NSTimer的用法,开起,关闭,停止,继续
下面是我封装好的一个Timer,语言:Swift3.0
import UIKitclass GHTimer: NSObject {
private var _timer:Timer!
/**
运行中的状态值
**/
private var _running = false
public var running:Bool {
get{
return _running
}
}
/**
暂停或停止的状态值
**/
private var _isPause = true
public var isPause:Bool{
get{
return _isPause
}
}
/**
执行的间隔时间(默认3秒)
重新设置这个值之后需要重新启动timer
**/
public var intervalTime:Double = 3 {
willSet{
if intervalTime != newValue && _timer != nil {
if _running {
close()
}
_timer = Timer(timeInterval: TimeInterval(newValue), repeats: repeats, block: run)
}
}
}
/**
一直重复执行(true)or执行一次(false,默认)
重新设置这个值之后需要重新启动timer
**/
public var repeats:Bool = false {
willSet{
if repeats != newValue && _timer != nil {
if _running {
close()
}
_timer = Timer(timeInterval: TimeInterval(intervalTime), repeats: newValue, block: run)
}
}
}
/**
需要重复执行的功能
**/
public var repeatRun:(()->Void)?init(interval:Double, repeats:Bool, repeatRun: @escaping (()->Void)) {
self.intervalTime = interval
self.repeats = repeats
self.repeatRun = repeatRun
}
/**
启动timer
**/
public func start() {
if !_running {
_timer = Timer(timeInterval: TimeInterval(intervalTime), repeats: repeats, block: run)
RunLoop.current.add(_timer, forMode: .commonModes)
_running = true
_isPause = false
}
}
/**
关闭timer
**/
public func close() {
if _running {
_isPause = true
_running = false
_timer.invalidate()
_timer = nil
}
}
/**
停止或暂停timer
**/
public func stop() {
if _running && !_isPause {
_timer.fireDate = Date.distantFuture
_isPause = true
}
}
/**
从停止或暂停中恢复timer
**/
public func resume() {
if _running && _isPause {
_timer.fireDate = Date(timeIntervalSinceNow: intervalTime)
_isPause = false
}
}
private func run(timer:Timer) {
repeatRun?()
}
}
Example:
import UIKitclass ViewController: UIViewController {var timer:GHTimer!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.let timeTimer = GHTimer(interval: 1, repeats: true, repeatRun: countTime)
timeTimer.start()
timer = GHTimer(interval: 2, repeats: true, repeatRun: run)
timer.start()
}
var count = 1
func countTime() {
print(count)
count = 1 + count % 5
}
func run() {
print("repeat: ", timer.intervalTime)
}
@IBAction func onClose(_ sender: UIButton) {
if timer.running{
print("close")
timer.close()
}else{
print("start")
timer.start()
}
}
@IBAction func onPause(_ sender: UIButton) {
if !timer.isPause {
print("pause")
timer.stop()
}else {
print("resume")
timer.resume()
}
}
@IBAction func onChangeInterval(_ sender: UIButton) {
print("change interval")
timer.intervalTime = 5
timer.start()
}override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}}
【2.NSTimer的用法,开起,关闭,停止,继续】源码实践:https://github.com/ghyh22/GHTimer
推荐阅读
- 不要去骗一个对你好的人
- 时间都去哪儿了|时间都去哪儿了 ——对过去的祭奠和对未来的展望
- 简评|简评 3D Touch
- 叶黄素(保护眼睛的”天然墨镜“)
- 我很快乐
- 如果我的孩子遇到了校园霸凌
- 狐尾沟的由来
- 三重天
- Windows|Windows 11上Dev C++ 5.11 提示 Failed to execute xxx Error 0的一种解决方法
- 赞美在学生教育中的应用