放大 uiscrollview 时将 uiimageview 拖入“垃圾箱”
Posted
技术标签:
【中文标题】放大 uiscrollview 时将 uiimageview 拖入“垃圾箱”【英文标题】:Dragging uiimageview into a "trashcan" while zoomed in on a uiscrollview 【发布时间】:2010-10-24 17:43:50 【问题描述】:大家好。我在网上搜索过,真的没有发现像这样的问题。我的设置如下:我正在尝试制作一个应用程序,其中用户将 uiimageviewss 拖到 uiscrollview 内的 uiview 上(可以放大),但也将图像拖到要删除的垃圾桶中。当滚动视图放大时,用户仍然可以拖动,因为我已经继承了 uiimageview 并覆盖了 touchesMoved 方法。我希望用户能够将 uiimageviews 拖到屏幕右下角的垃圾桶中。当 uiscrollview 是正常缩放比例时,我实现的内容已经有效,但是当您放大时,您无法将图像拖到垃圾箱,因为垃圾箱是控制器视图本身的子视图(这样它就不会缩放与 uiview)当然不在 uiscrollview 屏幕的正确坐标中。
我找到了一个名为 ConvertRect 的视图方法,它可以将矩形转换为您提供给该方法的任何视图的坐标,但这似乎不起作用。我在每个 mapimage(imageview 子类)中进行检查,检查 uiimageview 的框架与垃圾桶的框架相交。所以我在检查之前尝试了这种方法,但就像我说的那样,它似乎不起作用。
因此,尽管如此复杂,让我简单地说一下我的问题。无论 uiscrollview 的缩放级别如何,我都想将图像拖到垃圾桶。我可以让垃圾桶成为 uiscrollview 的一部分,但我需要一种方法让它保持在右下角,并且在 uiscrollview 时也不会缩放。任何想法将不胜感激,谢谢大家。 :)
【问题讨论】:
【参考方案1】:我也有同样的挑战。
In 可以简单描述一下:
当您开始拖动图像时,将其从 UISCrollView 中移除并将其作为子视图添加到您的 ViewController 的主视图中。
确保图像不会在此过程中丢失(意味着:有人仍然保留它)。
在拖动时,不断检查您的图像是否进入或离开垃圾桶的边界。你可以用下面的方法做到这一点:
-(void) checkForTrashCan
CGRect rect = [self.delegate.trashCan convertRect:self.view.frame fromView:self.view.superview];
if ([self.delegate.trashCan rectIntersectBounds:rect])
if (NOT self.isInTrashMode)
[self enterTrashMode];
else
if (self.isInTrashMode)
[self exitTrashMode];
当 rectIntersectBounds
方法只是我编写的 UIView 类的简单扩展方法时:
-(BOOL) rectIntersectBounds : (CGRect) rect
return CGRectIntersectsRect(self.bounds, rect);
当拖拽结束时,检查你的视图是否在垃圾桶内,并根据结果进行操作。
【讨论】:
以上是关于放大 uiscrollview 时将 uiimageview 拖入“垃圾箱”的主要内容,如果未能解决你的问题,请参考以下文章
在 UIScrollView 中获取 UIImage 可见部分的正确坐标
如何裁剪 UIScrollView 中显示的 UIImageView 部分并将其保存到 UIImage 变量?
如何缩放 UIImage 以适应 UIScrollView 的尺寸?