Время отклика UIButton для приложения iPad - PullRequest
0 голосов
/ 21 июня 2010

У меня есть простая кнопка UIB, которая при нажатии воспроизводит звук в течение 1 секунды.я хочу иметь возможность действительно быстро нажимать на эту кнопку и воспроизводить этот звук столько раз, сколько я могу по-человечески.

В настоящее время у меня есть это и работает, включая и, возможно, именно в этом виновника ...Кроме того, я копаюсь в ссылках Apple и не могу найти информацию о том, как быстро UIB-кнопка реагирует на каждое событие и как, если вообще, я могу контролировать и манипулировать этим значением.

если я переключусь надругой звуковой фреймворк, такой как «набор инструментов для аудио», или есть способ ускорить процесс, или, возможно, дать команду кнопке принять 2-е и 3-е нажатие, пока действие первого нажатия еще не завершено.

ура!

~ нир.

1 Ответ

0 голосов
/ 21 июня 2010

Создайте метод для воспроизведения звука отдельно от метода обработчика кнопок.Допустим, вы называете это playSound.В обработчике кнопок выполните этот метод в фоновом режиме с помощью:

[self performSelectorInBackground:@selector(playSound) withObject:nil];

Это приводит к дополнительным накладным расходам на создание потока, прежде чем он сможет воспроизвести звук.Если вы хотите еще немного ускорить его, создайте пул рабочих потоков и используйте:

[self performSelector:@selector(playSound) 
             onThread:nextThread 
           withObject:nil 
        waitUntilDone:NO];

Чтобы создать пул рабочих потоков:

-(void)stillWorking {
    NSLog(@"Still working!");
}

-(void)workerThreadMain {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
    NSTimer *threadTimer = [NSTimer scheduledTimerWithTimeInterval:10 
                                                            target:self 
                                                          selector:@selector(stillWorking) 
                                                          userInfo:nil 
                                                           repeats:YES];

    [[NSRunLoop currentRunLoop] addTimer:threadTimer forMode:NSDefaultRunLoopMode];
    [[NSRunLoop currentRunLoop] run];

    [pool drain];
}

-(NSArray*)createWorkerThreads { 
    NSMutableArray *threadArray = [[[NSMutableArray alloc] initWithCapacity:10]autorelease];
    NSThread *workerThread;

    for (i=0;i<10;i++) {
        workerThread = [[NSThread alloc]initWithTarget:self 
                                              selector:@selector(workerThreadMain) 
                                                object:nil];
        [workerThread start];
        [threadArray addObject:workerThread];
    }
    return [NSArray arrayWithArray:threadArray];
}

(Этот кодне проверено и может потребовать некоторой отладки, но оно должно привести вас в правильном направлении.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...