У меня есть UIView
с 4 кнопками на нем и еще одна UIView
поверх вида кнопок. Самый верхний вид содержит UIImageView
с UITapGestureRecognizer
на нем.
Поведение, которое я пытаюсь создать, заключается в том, что когда пользователь нажимает UIImageView
, он переключается между небольшим размером в правом нижнем углу экрана и анимацией, чтобы стать больше. Когда он большой, я хочу, чтобы кнопки на нижнем виде были отключены, а когда он маленький и в правом нижнем углу, я хочу, чтобы касания передавались на кнопки, чтобы они работали как обычно. Я почти на месте, но я не могу заставить прикосновения пройти к кнопкам, пока я не отключу UserInteractions
вида сверху.
У меня есть это в моем initWithFrame:
виде сверху:
// Add a gesture recognizer to the image view
UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imageTapped:)];
tapGestureRecognizer.cancelsTouchesInView = NO;
[imageView addGestureRecognizer:tapGestureRecognizer];
[tapGestureRecognizer release];
а я это мой imageTapped:
метод:
- (void) imageTapped:(UITapGestureRecognizer *) gestureRecognizer {
// Toggle between expanding and contracting the image
if (expanded) {
[self contractAnimated:YES];
expanded = NO;
gestureRecognizer.cancelsTouchesInView = NO;
self.userInteractionEnabled = NO;
self.exclusiveTouch = NO;
}
else {
[self expandAnimated:YES];
expanded = YES;
gestureRecognizer.cancelsTouchesInView = NO;
self.userInteractionEnabled = YES;
self.exclusiveTouch = YES;
}
}
С помощью приведенного выше кода, когда изображение большое, кнопки неактивны, когда я касаюсь изображения, оно сжимается и кнопки становятся активными. Однако небольшое изображение не получает прикосновений и поэтому не расширяется.
Если я установлю self.userInteractionEnabled = YES
в обоих случаях, то при касании изображение расширяется и сжимается, но кнопки никогда не получают прикосновения и действуют как отключенные.
Есть ли где-нибудь, чтобы изображение растягивалось и сжималось при прикосновении, а кнопки внизу могли получать прикосновения только в том случае, если изображение находится в сжатом состоянии? Я делаю что-то глупое и упускаю что-то очевидное?
Я схожу с ума, пытаясь заставить это работать, поэтому любая помощь будет оценена,
Dave
UPDATE:
Для дальнейшего тестирования я переопределил методы touchesBegan:
и touchesCancelled:
и вызвал их супер реализации в моем представлении, содержащем UIImageView. С кодом выше, touchesCancelled:
никогда не вызывается, а touchesBegan:
всегда вызывается.
Так что может показаться, что вид получает штрихи, они просто не передаются представлению внизу.
UPDATE
Это из-за того, как работает цепочка респондента? Моя иерархия представлений выглядит так:
VC - View1
-View2
-imageView1 (has tapGestureRecogniser)
-imageView2
-View3
-button1
-button2
Я думаю, что ОС сначала выполняет hitTest, поскольку говорит, что View2 находится впереди, поэтому должен получить все касания, и они никогда не будут переданы View3, если для userInteractions не установлено значение NO для View2, и в этом случае imageView1 также не может получить прикасается. Вот как это работает, и есть ли способ для View2 пройти через его прикосновения к View3?