放大 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 可见部分的正确坐标

iOS - 带有图层的 UIScrollVIew

如何裁剪 UIScrollView 中显示的 UIImageView 部分并将其保存到 UIImage 变量?

如何缩放 UIImage 以适应 UIScrollView 的尺寸?

在 UIImage 中转换 UIScrollView 的内容

UIScrollView 和 UIImage 在其中启用了分页