Не используйте кнопку, используйте мультитач и NSTimer:
Создайте локально видимый объект NSTimer внутри вашего интерфейса, затем используйте его для запуска / отмены таймера
-(void)movePlayer:(id)sender {
<Code to move player>
}
-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {
timer = [NSTimer scheduledTimerWithTimeInterval:0.3 target:self selector:@selector(movePlayer:) userInfo:nil repeats:YES];
}
-(void)touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event {
if (timer != nil)
[timer invalidate];
timer = nil;
}
-(void)touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event {
if (timer != nil) {
[timer invalidate];
timer = nil;
}
}
Таким образом, вы можете повторить событие с заданным интервалом, и вам не нужно полагаться на кнопку, и вы получите нужное вам повторение.
Обратите внимание на триггер touchesMoved - если они перемещают палец, это отменяет таймер, и игрок прекращает движение.