在超级视图中移动子视图

Posted

技术标签:

【中文标题】在超级视图中移动子视图【英文标题】:Moving subview in a super view 【发布时间】:2016-12-09 18:21:15 【问题描述】:

我有 view1、view2 和 view3․ view2 是 view1 的子视图,view3 是 view2 的子视图。我想在 view1 和 view2 内移动 view3,但是当我在 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];
    

【问题讨论】:

【参考方案1】:

一旦你在第二个视图之外释放第三个视图,它就在它的父视图之外。默认情况下,无法触摸其父视图之外的视图(即,它无法接收触摸事件)。这就是为什么你“不能再次选择它”。

【讨论】:

如何在 view2 和 view1 中移动 view3? 不要让 view3 成为 view2 的子视图。仅将它们都设为视图 1 的子视图。 有没有什么办法可以在不改变层次结构的情况下解决这个问题? 是的,你可以改变hit-testing的规则。我称之为hit-test munging。请参阅我书中的这一部分:apeth.com/iosBook/ch18.html#_hit_testing

以上是关于在超级视图中移动子视图的主要内容,如果未能解决你的问题,请参考以下文章

按下按钮(子视图)时不要在超级视图上处理平移手势

在 OSX 中将子视图拖到超级视图之外

UIView 在其 Superview 内移动

将 UIView 移动到新的超级视图并从 UITableViewCell 再次返回

如何在子视图移动期间使动画子视图中的按钮工作?

在 ScrollView 中移动子视图