У меня есть 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, и в этом случае изображениеView1 также не может быть получено прикасается. Это как это работает, и есть ли способ, чтобы View2 прошел через него, касается View3?