Мне нужно запустить NSTimer на 0: 0: 0, что я делаю, и у меня есть кнопка Pause при щелчке по тому, что таймер должен приостановить через некоторое время, если пользователь нажимает кнопку воспроизведения, он должен работать от приостановленного значения времени, Как сделать паузу и играть в NSTimer? Любая помощь? Спасибо заранее.
Как приостановить/проиграть NSTimer?
Ответ 1
Попробуй этот шизай... отлично поработал у меня
ИЗМЕНИТЬ
Честно говоря, мой фактический код таков:
-(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 файле
ИЗМЕНИТЬ!
здесь используется метод countUp. забыть метод вниз. секунды, минуты, часы - Ints
- (void)countUp
{
seconds += 1;
if (seconds == 60)
{
seconds = 0;
minutes++;
if (minutes == 60)
{
minutes = 0;
hours++;
}
}
}
Ответ 2
Ты не делаешь. Вместо паузы просто отмените действие и отпустите старый таймер, и когда пользователи снова нажмут "Воспроизвести", создайте новый таймер.
Ответ 3
refreshTimer
должен находиться на уровне класса. Используйте следующий код, чтобы остановить таймер:
refreshTimer = [NSTimer scheduledTimerWithTimeInterval: refreshInSeconds
target: self
selector: @selector(refreshPage)
userInfo: nil
repeats: YES];
[refreshTimer invalidate];
refreshTimer = nil;
Для запуска вы можете снова назначить таймер в виде строки 3
Ответ 4
Используйте следующий код для запуска таймера с аргументами:
timer = [NSTimer scheduledTimerWithTimeInterval:time target:self selector:@selector(callMyMethod:) userInfo:[NSDictionary dictionaryWithObjectsAndKeys:web1, @"web", baseURL, @"baseURL", option1, @"option", nil] repeats:NO];
а затем используйте
[timer invalidate];
чтобы остановить таймер.
Надеюсь, этот код вам поможет.
Спасибо.
Ответ 5
нет такой вещи, как пауза для NSTimer, вам нужно остановиться и запустить ее снова.
[yourTimer invalidate];//остановит таймер, после которого вы сможете снова запустить его
Ответ 6
Обновленный ответ для 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()
}
}