touchesBegan с задержкой


У меня есть подкласс UIView, и я добавил методы touchesBegan и touchesEnd...

В touchesBegan, я установил backgroundColor из белого в зеленый с помощью self.backgroundColor = [UIColor greenColor]... в touchesEnd я сбросил цвет на белый.

Это работает, но очень медленно. При нажатии на вид, это займет 0,5-1,0 секунды, пока я не увижу зеленый цвет.

Выбор ячейки в UITableView происходит намного быстрее.

2 7

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];
    }
}