2011-04-05 88 views
0

嗨,我在编程初学者添加一个倒计时,显示时间和触发一个动作

我已经创建了一个窃听程序,按结果按钮

我想补充后显示抽头数NSTimer,在第一次敲击30秒后(在第一次按下敲击按钮之后)计数。

的同时,显示时间倒计时的标签上(的UILabel timeLabel)

并在30秒,抽头数将重新启动为0

烦请告诉我,如果我需要发布以下任何内容,谢谢!

这里是我的.h文件

#import <UIKit/UIKit.h> 
#import <AVFoundation/AVAudioPlayer.h> 
#import <AudioToolbox/AudioToolbox.h> 

@class Player; 
@interface Tapping2ViewController : UIViewController 
<AVAudioPlayerDelegate> 

{ 
    Player *aPlayer; 
    IBOutlet UILabel *timerLabel; 
    IBOutlet UILabel *resultLabel; 
    AVAudioPlayer *buttonPlayer; 
    NSTimer *lv1Timer; 
    NSInteger *counter1; 

} 
- (IBAction)addTap:(id)sender; 
- (IBAction)getResult:(id)sender; 

-(void)restartTapCount; 
-(void)start; 

@property (retain) NSTimer *lv1Timer; 
@property (nonatomic, retain) IBOutlet UILabel *timerLabel; 

@end 

和我的.m文件

#import "Tapping2ViewController.h" 
#import "Player.h" 


@implementation Tapping2ViewController 

@synthesize lv1Timer; 
@synthesize timerLabel; 

- (id) initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil 
       bundle:nibBundleOrNil]; 
    if (self) { 

    } 
    return self; 
} 


- (void)dealloc 
{ 
    [resultLabel release]; 
    [lv1Timer release]; 
    [aPlayer release]; 
    [timerLabel release]; 
    [super dealloc]; 
} 

- (void)didReceiveMemoryWarning 
{ 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 

    // Release any cached data, images, etc that aren't in use. 
} 

#pragma mark - View lifecycle 


- (void)viewDidLoad 
{ 
    aPlayer = [[Player alloc] init]; 
    [super viewDidLoad]; 
} 



- (IBAction)addTap:(id)sender 

{ 

    //呢到係設定聲音, 首先要用NSSTRING 去 SET 左條路徑先 
    NSString *buttonFile = [[NSBundle mainBundle] pathForResource:@"button" ofType:@"wav"]; 

    //之後再條NSSTRING 轉做NSURL (因為AVPLAYER 只認URL) 
    NSURL *buttonFileURL = [NSURL fileURLWithPath:buttonFile]; 
    NSError *error = nil; 

    //設定AUDIO PLAYER 要播邊條 聲音 *記得SET DELEGATE 做自已去執行 
    buttonPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:buttonFileURL error:&error]; 
    [buttonPlayer setDelegate:self]; 

    NSLog(@"Before: %d", aPlayer.tapCount); 
    aPlayer.tapCount++; 

    //呼叫播放既METHOD 
    [buttonPlayer play]; 


    NSLog(@"After: %d", aPlayer.tapCount); 



    /* 
    //即時顯示數字 
    aPlayer.result = aPlayer.tapCount; 

    NSString *sResult = [NSString stringWithFormat:@"%D", aPlayer.result]; 

    resultLabel.text = sResult; 
    */ 
} 



- (IBAction)getResult:(id)sender { 

    aPlayer.result = aPlayer.tapCount; 

    NSString *aResult = [NSString stringWithFormat:@"%D", aPlayer.result]; 

    resultLabel.text = aResult; 

} 


-(void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event 

{ 
    if (motion == UIEventSubtypeMotionShake) 
    { 
     aPlayer.tapCount = 0; 
     resultLabel.text = @"0"; 
    } 
} 


- (void)viewDidUnload 
{ 

    [resultLabel release]; 
    resultLabel = nil; 
    [timerLabel release]; 
    timerLabel = nil; 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    // Return YES for supported orientations 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 

//下面係PART OF DETECT SHAKE 既METHOD 

-(BOOL)canBecomeFirstResponder 
{ 
    return YES; 
} 


-(void)viewDidAppear:(BOOL)animated 
{ 
[super viewDidAppear:animated]; 
[self becomeFirstResponder]; 
} 

-(void)viewWillDisappear:(BOOL)animated 
{ 
    [self resignFirstResponder]; 
    [super viewWillDisappear:animated]; 
} 

//去到呢到都係 

@end 
+0

什么是您所遇到的问题/问题?到目前为止,这只是一堆代码无论上下文还是问题。你有什么尝试?编译器或运行时错误? – bbum 2011-04-05 15:34:38

+0

o所以问题是,我怎样才能添加描述那里的NStimer,谢谢 – mikemike 2011-04-05 15:46:52

回答

1

这是我如何做,在一个应用程序,在启动:

count = COUNTDOWN_DURATION; 
countdownTimer = [NSTimer scheduledTimerWithTimeInterval:1 
        target:self selector:@selector(countDown) 
        userInfo:nil repeats:YES]; 

这将每秒钟调用一次countDown方法。你想什么在countDown方法但一定要停止NSTimer上完成(当然递减计数器):

if (count < 0) { 
    [countdownTimer invalidate]; 
    countdownTimer = nil; 
} 
... 
count--; 
+0

现在,它启动时自动启动应用程序?如果我只想点击点按钮开始倒计时,该怎么办? – mikemike 2011-04-05 15:51:24

+1

在您的按钮点击事件处理程序中启动'NSTimer' ... *(请转至Apple文档以了解如何执行此操作...)* – 2011-04-05 15:57:31

+2

请注意,重复出现“NSTimer”对象会累积错误。即如果您将间隔设置为1.0秒,那么实际上它会启动1.0秒+无论挂钟响应计时器还是某些斜坡消耗的时间。 30秒?没关系。准确的时间跨越几分钟或几小时?不要累积时间w/NSTimer。 – bbum 2011-04-05 16:05:02

相关问题