Итак, у меня есть приложение для гитары, которое играет аккорды, как автофокус.Я создал следующий класс UIView, чтобы превратить удар в ударную, когда пальцы пользователя проводят по струнам.
#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.Есть ли способ отключить кнопку UIB на заранее определенный период времени после того, как он получит сообщение UIControlEventTouchDown, скажем, на 0,1 секунды?Должен ли я создавать отдельные потоки для каждой строки и приостанавливать эти потоки?Прямо сейчас это вроде работает, но может легко превратиться в «матрицу» звучащей заикающейся гитары.Не хорошо.