Передача касаний в UIViews снизу

У меня есть 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?

64
задан KlimczakM 10 August 2015 в 11:45
поделиться