2011-04-05 1 views
0

안녕을 발사 NSTimer는 첫 번째 탭 이후 30 초 (탭 버튼을 처음 누른 후)로 계산됩니다. 라벨에 카운트 다운 시간을 표시하는 동시에 , 카운트 다운을 추가 시간을 표시하고 내가</p> <p>내가 추가 할 결과 버튼을 누른 후 탭의 수를 표시</p> <p>내가 이미 눌러 응용 프로그램을 만든 프로그래밍 초보자입니다 작업

(UILabel의 timeLabel)

30 초 후에, 탭 카운트는 0으로 다시 시작됩니다

내가 필요하면

친절하게 가르쳐주세요 다음과 같은 것을 게시하십시오. 감사합니다!

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

이 : 여기

다음
#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

+0

o 그래서 질문이 있습니다. NStimer를 거기에 설명 된대로 추가하려면 어떻게해야합니까? 지금 – mikemike

답변

1

내가 시작에, 응용 프로그램에서 그것을 어떻게 내 .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 파일입니다 매 초 countDown 메서드를 호출합니다. (물론 카운터를 감소하기 위해) 그 countDown 방법으로 당신이 원하는 무엇이든하지만 완료에 NSTimer을 중지해야합니다 :

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

에게 감사합니다. 앱을 시작할 때 자동으로 시작합니까? 내가 수돗물 버튼을 클릭 할 때만 카운트 다운을 시작하려면 어떻게해야합니까? – mikemike

+1

당신의 버튼 탭 이벤트 핸들러에서 * NSTimer를 시작하십시오. * (어떻게하는지 배우려면 Apple 문서로 가십시오.) * –

+2

반복적 인'NSTimer' 객체는 에러를 축적합니다. 나는. 간격을 1.0 초로 설정하면 타이머 + 일부 슬롭에 응답하여 벽 시계 시간이 소비 된 1.0 초 + 실제로 발생합니다. 30 초? 상관 없어요. 몇 분 또는 몇 시간의 정확한 시간 기준? NSTimer로 시간을 모으지 마십시오. – bbum

관련 문제