NSTimers дилемма

Төменде мен мектептегі оқушылар үшін жасайтын тегін бағдарламаның коды бар. Бұл өте қарапайым және он секунд ішінде экранды түрткен рет санайды. Менде 3-тен 0-ге дейін есептейтін бір таймер бар countDownTimer , содан кейін менің келесі таймерді 'myTimer' деп орнатады, содан кейін негізгі кері санақты 10-нан бастап құрайды - 0. бірінші таймер іске қосылғанда басталады және екінші секунд ішінде (10 секунд) орнатылғанда ғана жұмыс істегім келеді.

Мен қайда кеткенімді қайдан біле аламын?

#import "newgameViewController.h"
#import 
#import "ViewController.h"

@implementation newgameViewController
@synthesize tapStatus, score, time, countDown;

-(IBAction)start {

[myTimer invalidate];
score.text= @"";
time.text= @"10";
tapStatus.text= @"";
[countDownTimer invalidate];
countDownTimer = nil;
countDown.text= @"3";

countDownTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self   
selector:@selector(showActivityCountDown) userInfo:nil repeats:YES];

CFBundleRef mainBundle = CFBundleGetMainBundle();
CFURLRef soundFileURLRef;
soundFileURLRef =CFBundleCopyResourceURL(mainBundle, 
                                         (CFStringRef) @"beep", CFSTR ("wav"), NULL);

UInt32 soundID;
AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
AudioServicesPlaySystemSound(soundID);


}


-(IBAction)stop{

[myTimer invalidate];
myTimer = nil;
[countDownTimer invalidate];
countDownTimer = nil;
countDown.text= @"3";
}


-(IBAction)reset {

[myTimer invalidate];
myTimer = nil;
score.text= @"";
time.text= @"10";
tapStatus.text= @"";

[countDownTimer invalidate];
countDownTimer = nil;
countDown.text= @"3";


}


-(void)showActivityCountDown {

int currentTimeCount = [countDown.text intValue];
int newTimeCount = currentTimeCount - 1;

countDown.text = [NSString stringWithFormat:@"%d", newTimeCount];

if(currentTimeCount == 3)
{
    CFBundleRef mainBundle = CFBundleGetMainBundle();
    CFURLRef soundFileURLRef;
    soundFileURLRef =CFBundleCopyResourceURL(mainBundle, 
                                             (CFStringRef) @"beep", CFSTR ("wav"), NULL);

    UInt32 soundID;
    AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
    AudioServicesPlaySystemSound(soundID);

}

else if(currentTimeCount == 2)
{
    CFBundleRef mainBundle = CFBundleGetMainBundle();
    CFURLRef soundFileURLRef;
    soundFileURLRef =CFBundleCopyResourceURL(mainBundle, 
                                             (CFStringRef) @"beep", CFSTR ("wav"), NULL);

    UInt32 soundID;
    AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
    AudioServicesPlaySystemSound(soundID);

}


 else if(currentTimeCount == 1)
{
    CFBundleRef mainBundle = CFBundleGetMainBundle();
    CFURLRef soundFileURLRef;
    soundFileURLRef =CFBundleCopyResourceURL(mainBundle, 
                                             (CFStringRef) @"beep", CFSTR ("wav"), NULL);

    UInt32 soundID;
    AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
    AudioServicesPlaySystemSound(soundID);
    [countDownTimer invalidate];
    countDownTimer = nil;
    countDown.text= @"Go!";

myTimer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self   
selector:@selector(showActivity) userInfo:nil repeats:YES];

}
}


-(void)showActivity {

float currentTime = [time.text floatValue];
float newTime = currentTime - 0.1;

time.text = [NSString stringWithFormat:@"%.1f", newTime];

if(currentTime == 0.0)
{
    [myTimer invalidate];
    myTimer = nil;
    time.text= @"STOP!"; 
    score.text = tapStatus.text;
}
}

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

if (myTimer != nil) {
    NSUInteger tapCount = [[touches anyObject] tapCount];

    tapStatus.text = [NSString stringWithFormat:@"%d taps", tapCount];


}
}
0

1 жауаптар

tapCount дегенді пайдаланғыңыз келмейтін нәрсе үшін дәл болмайды - ол қайтарылады

қолданушы белгілі бір нүктеге саусақтарын қанша рет тапты?

және ол екі немесе үш рет түрту сияқты қимылды анықтайды. Бұл нүктеден басталады, қимылдарды тану жүйесі бұл жаңа қимылға айналады.

Мұның орнына, неліктен меншікті меншікке меншікке өзіңіз қарамаңыз:

@property(assign)NSUInteger tapCount;

Содан кейін touchesBegan: withEvent: ішіндегі есептегішті көбейтіңіз:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    if (myTimer != nil) {
        self.tapCount = self.tapCount + 1;
        tapStatus.text = [NSString stringWithFormat:@"%d taps", self.tapCount];
    }
}
0
қосылды