прикосновенияНачались с задержкой

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

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

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

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


person Raegtime    schedule 05.08.2015    source источник
comment
хм, может быть из-за неявной анимации при настройке таких свойств, как цвет backGroudn. Можешь проверить тач запаздывает или только изменение цвета?   -  person Volker    schedule 05.08.2015
comment
Этот ваш UIView находится внутри UITableView или UIScrollView?   -  person The dude    schedule 05.08.2015
comment
@Volker Хорошая мысль, но UIKit отключает неявную анимацию базовых CALayer (см. этот отличный ответ здесь), так что я думаю, что это не проблема. Я бы поискал delaysContentTouches супервью или что-то подобное.   -  person Alladinian    schedule 05.08.2015
comment
@Thedude -› да, это UITableViewCell   -  person Raegtime    schedule 05.08.2015
comment
Я знаю, что у этого уже есть принятый ответ, но я предлагаю вам попробовать это: UITableViews задерживает касания содержимого по умолчанию. У него есть свойство delaysContentTouches, вы должны установить его в NO. developer.apple .com/library/ios/documentation/UIKit/Reference/   -  person The dude    schedule 05.08.2015
comment
delayContentTouches = NO -> та же задержка :-(   -  person Raegtime    schedule 06.08.2015


Ответы (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];
    }
}

Примечание. Это будет работать быстрее.

person Mayur    schedule 05.08.2015
comment
хорошо, это работает, но если я помещу свой новый вид в UITableViewCell ... я не могу провести по ячейке, чтобы увидеть кнопку удаления :-( - person Raegtime; 05.08.2015
comment
Работает, но если представление находится внутри superView вида UIScrollView... ScrollView не может прокручиваться, начиная прокрутку внутри представления с minimumDressDuration = 0.0... поэтому вам нужно настроить это значение, например, на 0.1 ... и UIScrollView может прокручивать - person Raegtime; 06.08.2015
comment
почему touchesBegan будет иметь задержку? все-таки ускорить? - person TomSawyer; 16.11.2015

Вы должны использовать распознаватель жестов, как предложил TheBurgerShot, но я рекомендую вам 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];
    }
}
person Y.Bonafons    schedule 05.08.2015
comment
Вы знаете, почему touchesbegan имеет некоторую задержку? использование жестов может решить проблему, но не может иметь все атрибуты, такие как прикосновения, такие как множественное прикосновение. - person TomSawyer; 16.11.2015