touchesBegan с задержкой
У меня есть подкласс UIView
, и я добавил методы touchesBegan
и touchesEnd
...
В touchesBegan
, я установил backgroundColor
из белого в зеленый с помощью self.backgroundColor = [UIColor greenColor]
... в touchesEnd
я сбросил цвет на белый.
Это работает, но очень медленно. При нажатии на вид, это займет 0,5-1,0 секунды, пока я не увижу зеленый цвет.
Выбор ячейки в UITableView
происходит намного быстрее.
2 ответа:
Попробуйте это:
self.view.userInteractionEnabled = YES; UILongPressGestureRecognizer *recognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(doCallMethod:)]; recognizer.delegate = self; recognizer.minimumPressDuration = 0.0; [self.view addGestureRecognizer:recognizer]; - (void)doCallMethod:(UILongPressGestureRecognizer*)sender { if(sender.state == UIGestureRecognizerStateBegan){ NSLog(@"Begin"); self.view.backgroundColor = [UIColor greenColor]; }else if (sender.state == UIGestureRecognizerStateEnded){ NSLog(@"End"); self.view.backgroundColor = [UIColor whiteColor]; } }
Примечание: Это будет работать быстрее.
Вы должны использовать распознаватель жестов, как предложил Бургершот, но я рекомендую вам
UILongPressGestureRecognizer
. Что-то вроде:UILongPressGestureRecognizer *gesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(changeColor:)]; gesture.minimumPressDuration = 0.f; [self.yourView addGestureRecognizer:gesture];
В вашем
viewDidLoad
. И:-(void) changeColor:(UIGestureRecognizer *)gestureRecognizer{ if (gestureRecognizer.state == UIGestureRecognizerStateBegan){ self.yourView.backgroundColor = [UIColor greenColor]; } else if (gestureRecognizer.state == UIGestureRecognizerStateEnded){ self.yourView.backgroundColor = [UIColor whiteColor]; } }