Xcode4 Как я могу воспроизвести один таймер и перейти к другому, а затем обратно в виде цикла? - PullRequest
0 голосов
/ 16 августа 2011

Однако это немного сложнее ... Мне нужны два NSTimers:

  1. myTimer1 будет иметь скорость 1 сек.интервалы и игра в течение 6 интервалов остановите и перейдите к myTimer2 ...
  2. myTimer2 будет иметь скорость 2 секунды.интервалы и играть в течение 6 интервалов, а затем вернуться к myTimer1
  3. и продолжать до тех пор, пока не будет нажата кнопка остановки.

Мне удалось запустить только один таймер, и я могувыяснить, как сделать все остальное.Вот краткий обзор кода, который я использовал: .h

@interface sosTest8ViewController : UIViewController {
IBOutlet UILabel *myCounterLabel;

IBOutlet UIView *greenView;
IBOutlet UIView *blueView;

NSTimer *myTimer1;
NSTimer *myTimer2;
}
@property (nonatomic, retain)NSTimer *myTimer1;
@property (nonatomic, retain)NSTimer *myTimer2;

@property (nonatomic, retain) UILabel *myCounterLabel;

@property (nonatomic, retain) UIView *greenView;
@property (nonatomic, retain) UIView *blueView;

@end

.m

@synthesize myCounterLabel;
@synthesize greenView;
@synthesize blueView;
@synthesize myTimer1;
@synthesize myTimer2;

- (void)viewDidLoad
{
[super viewDidLoad];
self.myCounterLabel.text = @"0";

myTimer1 = [NSTimer scheduledTimerWithTimeInterval:1.0f
    target:self 
    selector:@selector(updateCounter:)
    userInfo:nil  
    repeats:YES];
}
-(void)updateCounter:(NSTimer*)theTimer{
static int count = 1;
count++;
NSString *s = [[NSString alloc]initWithFormat:@"%d", count];
self.myCounterLabel.text = s;
[s release];

self.blueView.hidden = YES;
self.greenView.hidden = YES;

switch (count & 0x01) {//was & 0x03
case 0: self.blueView.hidden = NO; break;
case 1: self.greenView.hidden = NO; break;
}
//I added this if bit as my own way, but doesn't jump to the net timer properly 
if (count >= 3) {
[myTimer1 invalidate];
self.myCounterLabel.text = @"0";
myTimer2 = [NSTimer scheduledTimerWithTimeInterval:2.0f
target:self 
selector:@selector(updateCounter2:) 

userInfo: nil повторяется: ДА];}

Итак, это формулаЯ играл с и до того, как я добавил оператор «если», он работал, и два цветных UIViews чередовались хорошо.Когда я изменяю скорость до двух в myTimer1 до 2, это работает при изменении интервала скорости.Мне просто нужна помощь в использовании рабочего синтаксиса для добавления второго перехода по таймеру, а затем его повторения.

Возможно, это даже невозможно сделать, но я надеюсь, что это так, и кто-то может мне помочь.

Большое спасибо.

- Роб

1 Ответ

0 голосов
/ 16 августа 2011

Я бы создал две строки NSSt

NSString *countone
NSString *countwo

Затем в вашем селекторе для вашего первого таймера:

if ([countone isEqualToString:@""]) {
    //do your stuff
    countone = @"1";
}
else if ([countone isEqualToString:@"1"]) {
     //do stuff
    countone = @"2";
}
else if ([countone isEqualToString:@"2"]) {
     //do stuff
    countone = @"3";
}

и так далее, пока не доберетесь до:

    else if ([countone isEqualToString:@"6"]) {
     //stop your first timer
     //start your second timer
    countone = @"";
}

И вы можете сделать то же самое для своего второго таймера, просто в обратном порядке, чтобы в конце вы запустили свой первый таймер, и таким образом он повторяется снова и снова! И чтобы остановить таймер, выполните:

[Timer invalidate];
Timer=nil;
...