如何将uiimage从scrollview拖到iphone sdk中的另一个uiimageview

时间:2011-09-15 05:39:49

标签: iphone objective-c uiscrollview drag-and-drop uiimageview

在我的应用程序中,我有一个包含多个图像的scrollVIew。

在滚动视图之外我有一个uiimageview。

我想从ScrollView拖动任何图像并将其放在滚动视图之外的uiimageview上。

有可能吗?

帮助和建议表示赞赏

提前致谢。

3 个答案:

答案 0 :(得分:4)

gamozzii's reply接近您需要做的事情,但有一个问题。 UIScrollView会触摸,因此点击图像将无效。 因此,您必须继承UIScrollView

我编写了一个小功能应用,用于说明将图像从滚动视图拖动到图像视图中。您可以下载项目here.

答案 1 :(得分:2)

是的,这应该是可能的,你需要直接实现触摸/拖动事件。

查看UIResponder中的touchesBegan,touchesMoved等委托方法。

一种方法是将imageview子类化并在其中实现touchesBegan,touchesMoved,并使用此imageview子类在滚动视图中显示图像。

在touchesBegan上创建一个新的图像视图并将其添加到外部视图并将其图像设置为与滚动视图中的图像相同。您需要在滚动视图中将其直接覆盖在源图像上,因此将其框架原点调整为相对于外部视图,您需要使用滚动视图原点以及内容视图大小和内容中的源图像视图的偏移量查看以重新计算外部视图中的新原点。

然后在移动的触摸上,根据移动的触摸的坐标简单地重新调整该图像的帧,以便图像跟随触摸。

对目标imageview的帧进行边界检查 - 一旦用户将其拖入此边界,使目标imageviews图像与拖动的视图中的图像相同,并从包含的视图中删除拖动的图像并释放它

答案 2 :(得分:1)

如果您仍然对另一个解决方案感兴趣(当然还有其他用户):

我之前就像gamozzii推荐的那样实现了这种行为。

我在canCancelContentTouches = NO上设置了UIScrollView,以确保子视图可以自行处理。如果触摸了子视图(在您的情况下是图像),我将视图从滚动视图移动到超视图上并开始跟踪它的拖动。 (您必须在新的超视图中计算正确的坐标,因此它保持不变)。拖动完成后,我检查是否到达目标区域,否则我将其移回滚动视图。

子视图正在处理那里的拖动(touchesBegan:/Moved:/Ended:/Cancelled:)。

如果这还不够详细,这是我的示例代码:Github: JDDroppableView