Grand Central Dispatch создаст другой поток для запуска. поэтому, если метод таймера (показанный ниже и предложенный выше) задерживает ваше приложение, вам нужно поместить команду в отдельный поток.
NSTimer
это то, что вы должны использовать, хотя. например, если вы хотите повторить метод, который инициируется нажатием кнопки, вы можете сделать это
- (void)viewDidLoad
{
[super viewDidLoad];
[cameraControlButtonUp addTarget:self action:@selector(cameraControlButtonUpPressed)
forControlEvents:UIControlEventTouchUpInside];
}
-(IBAction)buttonDown:(id)sender{
NSInteger tag = [sender tag];
if (tag==1) {
buttonCounter=1;
timer = [[NSTimer scheduledTimerWithTimeInterval:.5 target:self selector:@selector(sendJoin) userInfo:nil repeats:YES]retain];
}
}
-(void)sendJoin
{
switch (buttonCounter) {
case 1:
[cClient userDigitalPushAndRelease:372];
break;
default:
break;
}
}
-(void)cameraControlButtonUpPressed
{
[timer invalidate];
}
, которая будет повторять команду до отпускания кнопки. помните, что вам нужно связать ibaction с событием нажатия кнопки (только событие нажатия кнопки). а также создайте таймер в .h и отметьте кнопку 1, с которой вы хотите использовать это.
для более простого примера; это довольно просто. просто создайте свой метод для вызова, таймера и установите повтор в YES. затем вызовите аннулировать, чтобы остановить его. Мне пришлось создать отдельный метод sendJoin
, потому что я не мог получить числа для правильной передачи в метод. но если у вас нет никаких параметров, это еще проще. просто используйте синтаксис таймера для его создания, а затем сделайте его недействительным, когда вы закончите