#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
), но хотите, чтобы он реагировал на жесты:
-
Создайте
backgroundView
с тем же фреймом, что иtouchableView
:UIView *backgroundView = [[UIView alloc] initWithFrame:touchableView.frame];
-
Установите цвет фона
backgroundView
наclearColor
:backgroundView.backgroundColor = [UIColor clearColor];
-
Сбросить положение
touchableView
:CGRect frame = touchableView.frame;
frame.origin.x = 0;
frame.origin.y = 0; -
Отключить взаимодействие с пользователем
touchableView
:touchableView.userInteractionEnabled = NO;
-
Добавить
touchableView
в качестве подвида вbackgroundView
:[backgroundView addSubview:touchableView];
-
Добавьте соответствующие средства распознавания жестов в
backgroundView
. -
Добавьте
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. Да, сакрист, вы правы, но здесь проблема не в том, что вы скрываете или показываете изображение. Даже если я не скрываю / не показываю, я не могу получить жест касания для изображения во второй раз, однако все работает идеально при первом нажатии. Я не знаю, что происходит, я не могу выяснить причину этого.