2011-02-07 8 views
0

私はオートハープのようなコードを演奏するギターのアプリケーションを持っています。私は以下のUIViewクラスを作成して、ユーザーの指が文字列をスワイプしながらスワイプをスラムに変えました。iPhoneで現実的なStrumを作成するには?

#import "swipetest.h" 


@implementation swipetest 

@synthesize eStringButton, aStringButton, dStringButton, gStringButton, bStringButton, ehStringButton; 



- (void)viewDidLoad { 
[NSThread detachNewThreadSelector:@selector(isolateStrums) toTarget:self withObject:nil]; } 



- (void)isolateStrums { 

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
[self performSelectorOnMainThread:@selector(touchesMoved) withObject:nil waitUntilDone:NO]; 
[pool release]; 

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

CGPoint location = [[touches anyObject] locationInView:self]; 
UIView *subview = [self hitTest:location withEvent:event]; 
if ([subview isKindOfClass:[UIButton class]]) 
{ 



if(CGRectContainsPoint(eStringButton.frame, location)) { 
    [eStringButton setHighlighted:YES]; 
[eStringButton sendActionsForControlEvents:UIControlEventTouchDown]; 
[NSTimer scheduledTimerWithTimeInterval:strumDelay target:self selector:@selector(ETimer) userInfo:nil repeats:NO]; 

    } 

    else { 

     [eStringButton setHighlighted:NO]; 


    } 


    if(CGRectContainsPoint(ehStringButton.frame, location)) { 
     [ehStringButton setHighlighted:YES]; 
     [ehStringButton sendActionsForControlEvents:UIControlEventTouchDown]; 

    } 
    else { 

     [ehStringButton setHighlighted:NO]; 

    } 


if(CGRectContainsPoint(bStringButton.frame, location)) { 
     [bStringButton setHighlighted:YES]; 
     [bStringButton sendActionsForControlEvents:UIControlEventTouchDown]; 

    } 
else { 

    [bStringButton setHighlighted:NO]; 


} 

if(CGRectContainsPoint(aStringButton.frame, location)) { 
    [aStringButton sendActionsForControlEvents:UIControlEventTouchDown]; 
     [aStringButton setHighlighted:YES]; 

    } 
else { 

    [aStringButton setHighlighted:NO]; 


} 


if(CGRectContainsPoint(dStringButton.frame, location)) { 
     [dStringButton setHighlighted:YES]; 

    [dStringButton sendActionsForControlEvents:UIControlEventTouchDown]; 

    } 
else { 
    [dStringButton setHighlighted:NO]; 



} 
    if(CGRectContainsPoint(gStringButton.frame, location)) { 
     [gStringButton setHighlighted:YES]; 
     [gStringButton sendActionsForControlEvents:UIControlEventTouchDown]; 
    } 
    else { 
     [gStringButton setHighlighted:NO]; 



    } 




}  

} 





- (void)dealloc { 
[eStringButton release]; 
[aStringButton release]; 
[bStringButton release]; 
[gStringButton release]; 
[dStringButton release]; 
[ehStringButton release]; 



[super dealloc]; 
} 



@end 

問題は、通常のスラムスピードでもビューが急速な「ヒット」を登録するという問題です。インターフェイスの応答を遅くするにはどうすればいいですか? NSthreadを一時停止するコマンドは使用できません。 0.1秒間、UIControlEventTouchDownメッセージを受信した後、所定の期間UIButtonを無効にする方法はありますか?各文字列に対して個別のスレッドを作成し、それらのスレッドを一時停止する必要がありますか?今は作品の種類ですが、簡単に "マトリックス"のスターターギターに変身することができます。良くない。

答えて

1

それは UIControlEventTouchDownメッセージを受信した後、時間 の所定期間UIButton を無効にする方法はあり、0.1秒間 が言いますか?

確かに、NSTimerを使用してボタンの.userInteractionEnabledプロパティを変更できます。タッチが検出されるとすぐに「いいえ」に設定し、設定された秒数/分数の後に「はい」に戻すタイマーを起動します。

関連する問題