在放大uiscrollview的同时将uiimageview拖动到“垃圾桶”中

时间:2010-10-24 17:43:50

标签: ipad uiview drag-and-drop uiscrollview uiimageview

嘿大家好我在网上搜索过,确实没有发现像这样的问题。我的设置如下:我正在尝试创建一个应用程序,用户在uiscrollview(可以放大)内的uiview上拖动uiimageviewss,还可以将图像拖到垃圾桶中进行删除。当放大滚动视图时,用户仍然可以拖动,因为我已经将uiimageview子类化并覆盖了touchesMoved方法。我希望用户能够将uiimageviews拖动到屏幕右下角的垃圾桶中。当uiscrollview是正常缩放比例时,我实现的功能已经有效,但是当你放大时无法将图像拖动到垃圾桶,因为垃圾桶是控制器视图本身的子视图(这样它就不会缩放使用uiview)当然不在uiscrollview的屏幕右侧坐标。

我找到了一个名为ConvertRect的视图方法,它将矩形转换为您为方法提供的任何视图的坐标,但这似乎不起作用。我在每个mapimage(imageview子类)中检查,检查uiimageview的框架与垃圾桶的框架相交。所以我在做这个检查之前尝试这个方法,但就像我说它似乎没有用。

所有这些复杂性,让我简单地说一下我的问题。我想将图像拖到垃圾桶,无论uiscrollview的缩放级别如何。我可以制作uiscrollview的垃圾桶部分,但是我需要一种方法让它保持在右下角,并且在uiscrollview时也不会缩放。任何想法都会非常感激,谢谢你们。 :)

1 个答案:

答案 0 :(得分:0)

我遇到了同样的挑战。

可以简单地描述一下:

当您开始拖动图像时,将其从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);
}

当拖动结束时检查您的视图是否在垃圾桶内,并根据结果进行操作。