我在主视图中有一个滚动视图,我的滚动视图中有三个子视图。我的所有子视图中都有UIButtons。
现在,我想将这些按钮从一个子视图拖动到另一个子视图(拖动按钮时,滚动视图不应滚动)。
我该怎么做?
答案 0 :(得分:3)
我不完全确定这个代码片段是否适用于这个特殊情况(UIScrollView中的UIControl),但我对UIResponder链的理解告诉我它应该:)
- (void)viewDidLoad { // or wherever you initialize your things
...
// Add swipe event to UIButton so it will capture swipe intents
UIPanGestureRecognizer *panGR = [[UIPanGestureRecognizer alloc] init];
[panGR addTarget:self action:@selector(panEvent:)];
[button addGestureRecognizer:panGR];
[panGR release];
}
- (void)panEvent:(id)sender {
button.center = [sender locationInView:self.view];
}
如果这样做(现在无法测试,但在类似情况下它确实对我有效),那么你应该添加更多代码来处理拖拽和放大器。删除相关事件(可能会在UIScrollView中禁用“剪辑子视图”选项,如果该位置与目标的CGRect相交,则将按钮添加到新的超级视图,如果没有,则将按钮返回到原始位置等)。
那么,那些线路上发生了什么?当您开始触摸UIButton时,顺序不会到达UIScrollView,因为事件可能跟随触摸事件(由UIButton处理),或作为pan事件(由UIScrollView处理)。当您移动手指时,UIButton的响应者会解除该事件,因为没有Gesture Recognizer知道如果移动手指将如何继续。
但是当你向UIButton添加一个手势识别器,他实际上知道当手指被移动时该做什么,一切都是不同的:UIButton不会忽略该事件,而UIScrollView永远不会意识到有一个触摸移动它
我希望我的解释准确无误并且足够可靠。让我知道如果a)它不起作用或b)有些不清楚的东西。
祝你好运:)答案 1 :(得分:0)
Try
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
if (allowAppDrag && [gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) {
return NO;
}
return YES;
}