UIImageView не распознает жест во второй раз

#iphone #uiimageview #gesture

#iPhone #uiimageview uiimageview #жест #UIImageView

Вопрос:

Я внедрил UITapGestureRecognizer on UIImageView , он работает при первом нажатии. При первом нажатии я скрываю это изображение и запускаю анимацию. Как только анимация будет завершена, я снова покажу изображение. Но после настройки setHidden:FALSE я не получаю событие Tap этого UIImageView .

Ниже приведен код, который я использую :

 - (void)viewDidLoad{

[super viewDidLoad];

defaultDogView= [[UIImageView alloc] initWithFrame:CGRectMake(3, 270, 110, 210)];
[defaultDogView setImage:[UIImage imageNamed:@"dog1.png"]];
defaultDogView.userInteractionEnabled = YES;
[self addGestureRecognizersToPiece:defaultDogView];


[self.view addSubview:defaultDogView];
}

- (void)addGestureRecognizersToPiece:(UIImageView *)piece 
{
NSLog(@"in Gesture");
   UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapPiece:)];
[tapGesture setDelegate:self];

[piece addGestureRecognizer:tapGesture];
[tapGesture release];

UILongPressGestureRecognizer *longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressPiece:)];
[piece addGestureRecognizer:longPressGesture];
[longPressGesture release];

NSLog(@"%@", [piece gestureRecognizers]);
}
- (void)singleTapPiece:(UITapGestureRecognizer *)gestureRecognizer
{
NSLog(@"Image Tapped");

/** Hide the default Image and start the animation ***/

[defaultDogView setHidden:TRUE];

/***Animating the Dog***/
[dogArray addObject:[SpriteHelpers setupAnimatedDog:self.view numFrames:69 withFilePrefix:@"dog" withDuration:(12) ofType:@"png" withValue:0]];
dogView = [dogArray objectAtIndex:0];
//[self addGestureRecognizersToPiece:dogView];



[self performSelector:@selector(callBubbleUpdater) withObject:nil afterDelay:5.5];


}
-(void)showDogFrame{
NSLog(@"%@",[defaultDogView gestureRecognizers]);
[defaultDogView setHidden:FALSE];
defaultDogView.userInteractionEnabled = YES;

}
  

Ответ №1:

Когда view это hidden или его alpha компонент zero , это представление не получит ни UIGestureRecognizers одного.

Я могу предложить использовать следующий подход, если вам нужно скрыть какой-либо вид (назовем его touchableView ), но хотите, чтобы он реагировал на жесты:

  1. Создайте backgroundView с тем же фреймом, что и touchableView :

    UIView *backgroundView = [[UIView alloc] initWithFrame:touchableView.frame];

  2. Установите цвет фона backgroundView на clearColor :

    backgroundView.backgroundColor = [UIColor clearColor];

  3. Сбросить положение touchableView :

    CGRect frame = touchableView.frame;
    frame.origin.x = 0;
    frame.origin.y = 0;

  4. Отключить взаимодействие с пользователем touchableView :

    touchableView.userInteractionEnabled = NO;

  5. Добавить touchableView в качестве подвида в backgroundView :

    [backgroundView addSubview:touchableView];

  6. Добавьте соответствующие средства распознавания жестов в backgroundView .

  7. Добавьте backgroundView в представление, которое вы хотите.

Теперь вы можете скрыть touchableView , но вы все равно будете получать распознаватели жестов.

Я не проверяю это, но я думаю, что это должно сработать.

Комментарии:

1. Да, Некто, вы правы, но здесь проблема не в том, что вы скрываете или показываете изображение. Даже если я не скрываю / не показываю, я не могу получить жест касания для изображения во второй раз, однако все работает идеально при первом нажатии. Я не знаю, что происходит, я не могу выяснить причину этого.

2. Вы сказали : But After setting setHidden:FALSE, I am not getting the Tap event of that UIImageView. . Разве вы не можете сказать, что это работает неправильно, если вы не скрываете изображение? Я потратил 10 минут, чтобы написать этот пост = (

3. Извините, Некто, но после публикации этого я попробовал код, не скрывая изображение, и на этот раз я узнаю, что это не из-за скрытия изображения. Похоже, это какая-то другая проблема.

Ответ №2:

конечно

когда UIImageView скрыт. он не получает никаких событий касания

установите альфа-ноль для uiimageview

Комментарии:

1. Да, сакрист, вы правы, но здесь проблема не в том, что вы скрываете или показываете изображение. Даже если я не скрываю / не показываю, я не могу получить жест касания для изображения во второй раз, однако все работает идеально при первом нажатии. Я не знаю, что происходит, я не могу выяснить причину этого.