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

标签 iphone objective-c ipad interface-builder drag

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

enter image description here

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

enter image description here

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

enter image description here

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

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

enter image description here

对于:

enter image description here

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

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

我实际上需要创建一个像 power point 演示这样的应用程序,并且我需要在用户滑动 UIView 时更改幻灯片,例如,如果它的线小于 x,那么我将加载下一张幻灯片(nib 文件)用户界面 Controller 。也许有一种更简单的方法来做我需要的事情,但如果我让这个拖拽工作,我就完成了,因为我只需要做一次那个功能。

最佳答案

如果您希望它响应事件,您应该为您的 subview 保留 UserInteractionEnabled 标志。

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

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

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

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

然后在 handlePanGesture 方法中,您使用它传递的识别器的 translationInView 方法计算出用户平移的距离,并相应地转换 subview 。

关于iphone - 拖动 UIView 而不禁用其子控件 iPhone/iPad,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6658563/

相关文章:

ios - 启动图像未在 iPhone 应用程序中加载

ios - 在 TabbarController 中为特定索引设置 ViewController

ios - 线程 1 : Signal SIGABRT due to calling another method

iOS:使用类型 'CGRect'(又名 'struct CGRect'),其中需要算术或指针类型

ios - 为什么第二部手机与设备配对后,CBCentralManager 会向第一部手机报告 "Peer removed pairing information"?

iphone - 存储图像的最佳位置是什么

ios - 如何从这个 [value isKindOfClass :[NSError class]]? 转换为 NSError

iphone - 是否要在后台队列中调用 AVAudioPlayer 的 -prepareToPlay?

iphone - 使用 fetchedresultcontroller 为每个月设置不同的部分

ios - UiSplitViewController 的主人里面的 UITabBarController