1

У меня есть пользовательский класс представления. Внутри моего контроллера просмотра я добавляю распознаватель жестов Tap на этом объекте представления. Теперь, в обработчике жестов tap, я настраиваю свойство на моем объекте представления, которое я пытаюсь извлечь в drawRect класса my view. Теперь, неожиданно, когда я печатаю объекты вида в своем «handleGesture» & «drawRect», я получаю два разных объекта. Из-за этого мое условие if внутри drawRect не получает выполнение. Что может быть причиной?Обработка UITapGestureRecognizer в пользовательском представлении

Он не входит в состояние UIGestureRecognizerStateBegan. Он всегда входит в UIGestureRecognizerStateEnded.

// Adding Gesture in my view 
MyCustomView *customView= [[[MyCustomView alloc] init] autorelease]; 
UIGestureRecognizer *GestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)]; 
     [customView addGestureRecognizer:GestureRecognizer]; 
     [GestureRecognizer release]; 

// Handling tap on my view 
- (void)handleGesture:(UIGestureRecognizer *)GestureRecognizer; { 
    MyCustomView *aView= (MyCustomView *)GestureRecognizer.view; 
switch (iGestureRecognizer.state) { 
    case UIGestureRecognizerStateBegan: 
     NSLog(@"Began"); 
     [aView setNeedsDisplay]; 
     aView.touchDown = YES; 
     break; 
    case UIGestureRecognizerStateEnded:  
     NSLog(@"Ended"); 
     aView.touchDown = NO; 
     [aView setNeedsDisplay]; 
     break; 
    default: 
     break; 
} 
} 

// Inside my view class 
- (void)drawRect:(CGRect)iRect { 
    if (self.touchDown) { 
// Do something here 
} 
} 

ответ

2

Нет ничего, вызывающего метод drawRect. Вы не хотите делать это напрямую, но в вашем методе handleGesture вы можете отправить вызов [aView setNeedsDisplay], и drawRect вашего представления будет вызван в следующем цикле рисования.

+0

Если вы хотите сделать немного рефакторинга, вы можете создать собственное представление для своего собственного распознавателя жестов и реализацию handleGesture. Таким образом, он может обрабатывать всю эту логику внутри представления, и вам может не понадобиться флаг touchDown, который вы используете. Возможно, вы могли бы даже устранить необходимость переопределить drawRect: – picciano

+0

Да ... Я так и думал, но это не помогло. Причина этого заключается в том, что я перерисовываю таблицу внутри моего «handleGesture», которая создает другой объект моего пользовательского представления, а затем все это испортится. – Abhinav

+0

Ах, тем более разумнее распознать жест от контроллера к виду. Несомненно, в любом случае вам не следует создавать дополнительные экземпляры пользовательского представления. – picciano

Смежные вопросы