拖动UIView而不禁用其子控件iPhone / iPad

时间:2011-07-12 01:24:31

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

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

enter image description here

此外我能够拖动那个控件...

enter image description here

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

enter image description here

如果你们有兴趣了解我如何将该nib文件放在UIView控件中,请查看this问题。为了理解我的问题,我不需要阅读它。

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

enter image description here

有:

enter image description here

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

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

我实际上需要创建一个像power point演示文稿的应用程序,我需要在用户滑动UIView时更改幻灯片,如果它的绳索小于x,那么我加载下一张幻灯片(nib文件) uiview控制器。也许有一种更简单的方法来做我需要的东西,但是如果我让这种拖拽工作我就完成了因为我只需要做一次这样的功能。

1 个答案:

答案 0 :(得分: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方法中,您可以确定用户使用识别器的translateInView方法进行平移的距离,并相应地翻译子视图。