【发布时间】:2012-07-11 22:01:42
【问题描述】:
我有 UIView,我希望能够在其中拖放子视图,这可以正常工作一次。
- (void)pan: (UIPanGestureRecognizer *)recognizer
{
if (recognizer.state == UIGestureRecognizerStateBegan) {
CGPoint startPos = [recognizer locationInView:self];
for (UIControl *sv in self.subviews){
if ([sv pointInside:startPos withEvent:nil]){
self.controlBeingDragged = sv;
}
}
}
if (((recognizer.state == UIGestureRecognizerStateChanged) ||
(recognizer.state == UIGestureRecognizerStateEnded)) &&
self.controlBeingDragged){
CGPoint translation = [recognizer translationInView:self];
self.controlBeingDragged.center = CGPointMake(self.controlBeingDragged.center.x + translation.x, self.controlBeingDragged.center.y + translation.y);
[recognizer setTranslation:CGPointZero inView:self];
if (recognizer.state == UIGestureRecognizerStateEnded){
self.controlBeingDragged = nil;
}
}
}
但是,如果我再次尝试拖动相同的 UIControl,则包含视图不再知道它在哪里。我可以从原始位置开始再次拖动它,所以很明显,我没有做一些事情来通知包含视图它的子视图已经移动。但是什么?
【问题讨论】:
-
当您再次尝试拖动同一个控件时,上述代码的哪一部分没有运行;如果您使用跟踪写入或调试器,哪些行没有到达?
标签: objective-c ios uiview drag-and-drop