私はオートハープのようなコードを演奏するギターのアプリケーションを持っています。私は以下の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を無効にする方法はありますか?各文字列に対して個別のスレッドを作成し、それらのスレッドを一時停止する必要がありますか?今は作品の種類ですが、簡単に "マトリックス"のスターターギターに変身することができます。良くない。