【问题标题】: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];
    }
}

【问题讨论】:

    标签: ios objective-c uipangesturerecognizer


    【解决方案1】:

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

    【讨论】:

    • 如何在 view2 和 view1 中移动 view3?
    • 不要让 view3 成为 view2 的子视图。仅将它们都设为视图 1 的子视图。
    • 有没有什么办法可以在不改变层次结构的情况下解决这个问题?
    • 是的,你可以改变hit-testing的规则。我称之为hit-test munging。请参阅我书中的这一部分:apeth.com/iOSBook/ch18.html#_hit_testing
    猜你喜欢
    • 1970-01-01
    • 2012-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    • 1970-01-01
    • 2016-06-29
    相关资源
    最近更新 更多