Перемещение подпредставления в суперпредставлении

У меня есть view1, view2 и view3 ․ view2 - это subview для view1, а view3 - это subview для view2. Я хочу переместить view3 внутрь view1 и view2, но когда я отпускаю его внутри view1, я не могу снова его выбрать.

Вот код, который я пробовал.

UIPanGestureRecognizer* panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
[self.thriedView addGestureRecognizer:panGesture];

- (void) handlePan: (UIPanGestureRecognizer*) panGesture {
    if (panGesture.state == UIGestureRecognizerStateChanged) {
        CGPoint translation = [panGesture translationInView:panGesture.view];
        panGesture.view.center = CGPointMake(panGesture.view.center.x + translation.x,
                                             panGesture.view.center.y + translation.y);

        [panGesture setTranslation:CGPointZero inView:panGesture.view];
    }
}

person Katrin    schedule 09.12.2016    source источник


Ответы (1)


Как только вы освободите третье представление за пределами второго представления, оно окажется вне своего супервизора. По умолчанию представление за пределами своего супервизора не может быть затронуто (т.е. оно не может получать события касания). Вот почему ты «не можешь снова его забрать».

person matt    schedule 09.12.2016
comment
И как мне переместить view3 внутрь view2 и view1? - person Katrin; 09.12.2016
comment
Не делайте view3 подвидом view2. Сделайте их оба подпредставлениями только представления 1. - person matt; 09.12.2016
comment
разве нет способа решить эту проблему, не меняя иерархию? - person Katrin; 09.12.2016
comment
Да, вы можете изменить правила проверки попадания. Я называю это хитростью. См. Этот раздел моей книги: apeth.com/iOSBook/ch18.html#_hit_testing - person matt; 09.12.2016