添加倒计时,显示时间并触发操作

时间:2011-04-05 15:29:39

标签: iphone objective-c nstimer countdown

您好我是编程的初学者

我已经创建了一个点击应用程序,在按结果按钮

后显示点击计数

我想添加一个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

1 个答案:

答案 0 :(得分: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--;