如何在iPhone SDK中从UIScrollView中拖动UIImage到另一个UIImageView?

3
在我的应用程序中,我有一个包含多张图片的ScrollView。
除了ScrollView之外,我还有一个UIImageView。
我想从ScrollView中拖动任何一张图片,并将其放到不在ScrollView中的UIImageView上。
这是可能的吗?
欢迎帮助和建议。
提前致谢。

您可以参考以下链接: (1) http://iphoneapplicationdevelopers.blogspot.com/2011/03/iphone-how-to-drag-and-drop-images-in.html (2) http://www.icodeblog.com/2008/10/20/iphone-programming-tutorial-using-uitouch-to-drag-an-image-around-the-screen/ (3) http://www.edumobile.org/iphone/iphone-programming-tutorials/uiimageview-with-touches-in-iphone/ - Maulik
3个回答

4
"

gamozzii的回复非常接近您需要做的事情,但是存在一个问题。UIScrollView会吞噬触摸事件,因此点击图像将不起作用。因此,您将需要对UIScrollView进行子类化。

我编写了一个小型的功能应用程序来说明如何将图像从滚动视图拖入图像视图。您可以在此处下载项目。

"

嘿,你知道这段代码在iOS 5.0模拟器中不起作用吗?它在iOS 4.3中可以运行。你知道有什么好的解决方法吗? - Arcadian
是的,我相信iOS 5在触摸方面存在一些问题。不过我不记得在哪里读到过了。 - Radu Lucaciu

2
是的,这是可能的,你需要直接实现触摸/拖动事件。在UIResponder中检查touchesBegan、touchesMoved等委托方法。
一种方法是子类化imageview并在其中实现touchesBegan、touchesMoved,并使用此imageview子类在滚动视图中显示您的图像。
在touchesBegan上创建一个新的图像视图并将其添加到外部视图,并将其图像设置为与滚动视图中的图像相同。您需要直接覆盖它在滚动视图中的源图像,因此调整其框架原点以相对于外部视图。您需要使用源图像视图在内容视图内的滚动视图原点、内容视图大小和偏移量来重新计算外部视图中的新原点。
然后,在touches moved上,根据来自touches moved的坐标简单地调整此图像的框架,以使图像跟随触摸。
针对目标imageview的框架进行边界检查-一旦用户将其拖入此边界,使该目标imageviews的图像与正在拖动的视图中的图像相同,并从包含视图中删除拖动的图像并释放它。

1

如果您仍然对另一种解决方案感兴趣(当然也适用于其他用户):

我之前实现过像gamozzii建议的那样的行为。

我在UIScrollView上设置了canCancelContentTouches = NO,以确保子视图自己处理它们的触摸事件。如果触摸到子视图(在您的情况下是图像),我将该视图移出滚动视图并开始跟踪其拖动。(您必须计算新父视图中的正确坐标,以便它保持在原位)。拖动完成后,我检查是否达到了目标区域,否则将其移回滚动视图。

子视图通过(touchesBegan:/Moved:/Ended:/Cancelled:)自己处理拖动。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接