【问题标题】:Drag UIView without disabling its child controls iPhone/iPad拖动 UIView 而不禁用其子控件 iPhone/iPad
【发布时间】:2011-07-12 01:24:31
【问题描述】:

我有一个 UIView 控件(图像中的白色矩形)

此外,我可以拖动该控件...

当我按下按钮时,我加载了一个子视图,这是我创建的另一个 nib,我在其中放置了随机控件以说明我的观点......

如果你们有兴趣了解我是如何将该 nib 文件放置在 UIView 控件中的,请查看this 问题。我不认为您必须阅读它才能理解我的问题。

无论如何,加载该 nib 文件时的问题是我无法再拖动顶部 UIView。因此我改变了:

为:

在子视图的 UIView 中。换句话说,我放置在具有白色背景的 UIView 中的 nib 文件的 UIView。

当我这样做时,我能够拖动控件,但子视图内的控件不再起作用。我也尝试将 touchesMoved 方法放在子视图中,但是当我这样做时,应用程序的行为很奇怪。另外,将 nib 文件放在 UIView 控件中的目的是避免在多个 nib 文件上重复相同的拖动功能。

我实际上需要创建一个类似于 power point 演示文稿的应用程序,并且我需要在用户滑动 UIView 时更改幻灯片,例如,如果它的绳子小于 x,那么我会在其中加载下一张幻灯片(nib 文件) uiview 控制器。也许有一种更简单的方法来做我需要的事情,但如果我让这个拖动工作我就完成了,因为我只需要执行一次该功能。

【问题讨论】:

    标签: iphone objective-c ipad interface-builder drag


    【解决方案1】:

    如果您希望子视图响应事件,您应该为您的子视图保留 UserInteractionEnabled 标志。

    实现此目的的一种方法是使用 UIGestureRecognizer 进行拖动。

    UIPanGestureRecognizer 非常适合这个 (UIGestureRecognizer at apple)

    基本上你会将手势识别器附加到你想要平移的视图上,然后在它提供的回调中调整它的位置。

    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc]
                                          initWithTarget:self action:@selector(handlePanGesture:)];
    panGesture.minimumNumberOfTouches = 1;
    [draggableSubview addGestureRecognizer:panGesture];
    [panGesture release];
    

    然后在handlePanGesture 方法中,您可以使用识别器的translationInView 方法计算出用户平移了多远,并相应地翻译子视图。

    【讨论】:

    • 非常感谢,这似乎正是我需要的,但我不知道如何使用它。我必须将代表放在哪里?我是 Objective-c 的新手...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多