我目前正在开发一个项目,我在嵌入式tableview中有推文,需要将选定的单元格拖放到viewcontroller上。我怎样才能使这个工作?我是初学者因此没有太多想法。有什么建议可以解决这个问题吗?
答案 0 :(得分:0)
有很多方法可以做drop,但这里是一个可能让你开始的过程的概述。
您可以使用UIPanGestureRecognizer或touchesBegan / touchesMoved / touchesEnded方法来确定用户何时启动,移动或删除对象。
当拖动开始时,您需要从超级视图中分离视图(removeFromSuperview),当触摸在屏幕上移动时,touchesMoved将触发(如果您使用的是GestureRecognizers,状态将更改为UIGestureRecognizerStateChanged。用户的手指移动,您将调整视图的中心(例如,dragView.center)以反映新的位置。最后,当它被删除时,处理touchesEnded(或平移手势识别器中的状态更改为UIGestureRecognizerStateEnded)。 / p>
您通常会在这些主题和其他地方看到示例,说明如何计算新中心,但通常看起来像这样:
float dx = pt.x - startLocation.x; // calculate change in x
float dy = pt.y - startLocation.y; // change in y
CGPoint newCenter = CGPointMake(self.center.x + dx, self.center.y + dy); // calculate new center
self.center = newCenter; // set new center
这会导致您的视图移动,为下一次迭代做好准备。
从一个视图移动到另一个视图时会更复杂,因为您必须在坐标系之间进行转换。
如果您熟悉仿射变换,有一种方法更简单,其中StateChange(即视图移动)的处理方式如下:
CGPoint translation = [sender translationInView:dragView];
CGAffineTransform theTransform = dragView.transform;
theTransform.tx = translation.x;
theTransform.ty = translation.y;
dragView.transform = theTransform;
当跌落发生时,它是这样的:
CGPoint newCenter = CGPointMake(dragView.center.x + dragView.transform.tx, dragView.center.y + dragView.transform.ty);
dragView.center = newCenter;
CGAffineTransform theTransform = dragView.transform;
theTransform.tx = 0.0f;
theTransform.ty = 0.0f;
(code to attach to receiving view).
另一个复杂因素是视图只能在接收视图中的某些位置删除。处理它的最好方法是创建一个“drop targets”数组,它只包含接受drop的视图。您通常使用标记来标识选择了哪个放置目标。
我发现UIPanGestureRecognizer更容易使用,但无论哪种方式都有效。我还认为如果你在一个特殊的“dragView”中处理手势识别会更容易 - 但是在某些情况下这不起作用(或者我无法使其工作),这就是那种情况是可以删除项目的多个视图。如果你能适应它,那么有一些代码可以在这里工作:
http://www.ancientprogramming.com/2012/04/05/drag-and-drop-between-multiple-uiviews-in-ios/
我没有尝试过,但其他人似乎对它有好运。
我不知道这是否会有所帮助,但也许它会让你滚动。