我需要以0:0:0的方式启动NSTimer我正在做的事情,我点击了一个暂停按钮,如果用户点击播放,定时器必须暂停一段时间,它必须从暂停的时间值开始运行。如何暂停和玩NSTimer? 有帮助吗?提前谢谢。
答案 0 :(得分:21)
试试这个shizzle ......对我来说很棒
修改
说实话,我的实际代码是:
-(IBAction)clicked:(id)sender
{
if ([startStop.titleLabel.text isEqualToString:@"Start"])
{
[startStop setTitle:@"Pause" forState:UIControlStateNormal];
[startStop setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(countUp) userInfo:nil repeats:YES];
timerDown = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(countDown) userInfo:nil repeats:YES];
} else if ([startStop.titleLabel.text isEqualToString:@"Pause"])
{
[startStop setTitle:@"Resume" forState:UIControlStateNormal];
[startStop setTitleColor:[UIColor colorWithRed:0/255 green:0/255 blue:255/255 alpha:1.0] forState:UIControlStateNormal];
pauseStart = [[NSDate dateWithTimeIntervalSinceNow:0] retain];
previousFireDate = [[timer fireDate] retain];
[timer setFireDate:[NSDate distantFuture]];
} else if ([startStop.titleLabel.text isEqualToString:@"Resume"])
{
[startStop setTitle:@"Pause" forState:UIControlStateNormal];
[startStop setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
float pauseTime = -1*[pauseStart timeIntervalSinceNow];
[timer setFireDate:[NSDate dateWithTimeInterval:pauseTime sinceDate:previousFireDate]];
[pauseStart release];
[previousFireDate release];
}
}
我使用了UIButton并在点击时使用了这段代码。
记得把这个:
NSDate *pauseStart, *previousFireDate;
你的.h文件中的
EDIT!
这是countUp方法。忘记了down方法。秒,分钟,小时是Ints
- (void)countUp
{
seconds += 1;
if (seconds == 60)
{
seconds = 0;
minutes++;
if (minutes == 60)
{
minutes = 0;
hours++;
}
}
}
答案 1 :(得分:8)
你没有。
可以创建一个新的计时器,而不是暂停只是使旧计时器失效并释放旧计时器答案 2 :(得分:4)
refreshTimer
应该是班级。使用以下代码停止计时器:
refreshTimer = [NSTimer scheduledTimerWithTimeInterval: refreshInSeconds
target: self
selector: @selector(refreshPage)
userInfo: nil
repeats: YES];
[refreshTimer invalidate];
refreshTimer = nil;
要开始,您可以再次将计时器安排为第3行
答案 3 :(得分:3)
使用以下代码启动带参数的计时器:
timer = [NSTimer scheduledTimerWithTimeInterval:time target:self selector:@selector(callMyMethod:) userInfo:[NSDictionary dictionaryWithObjectsAndKeys:web1, @"web", baseURL, @"baseURL", option1, @"option", nil] repeats:NO];
然后使用
[timer invalidate];
停止计时器。
我希望这段代码可以帮到你。
感谢。
答案 4 :(得分:1)
没有NSTimer暂停的事情,你必须停下来再启动它。
[yourTimer invalidate]; //将停止计时器,之后您可以再次启动它
答案 5 :(得分:0)
更新了Swift 2的答案
import UIKit
class ViewController: UIViewController {
var myTimer = NSTimer()
var time = 0 // global var
@IBOutlet weak var counterLabel: UILabel!
@IBAction func pauseTimer(sender: AnyObject) {
myTimer.invalidate()
}
@IBAction func startTimer(sender: AnyObject) {
myTimer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("result"), userInfo: nil, repeats: true)
}
func result() {
time++
counterLabel.text = String(time)
print(time)
}
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}