2010-10-24 53 views
0

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

我发现了一个名为ConvertRect的视图方法,它将一个矩形转换为您给该方法的任何视图的坐标,但这似乎不起作用。我在每个mapimage(imageview子类)中进行检查,以检查uiimageview的框架是否与trashcan的框架相交。所以我在做这个检查之前尝试了这个方法,但就像我说的那样,它似乎没有工作。

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

回答

0

我有完全相同的挑战。

在可以只形容简称:

当你开始拖动图像从UIScrollView中删除,并将其添加作为一个子视图您的视图控制器的主视图。

确保图像在过程中不会丢失(意味着:仍有人保留它)。

拖动时,不断检查,看看您的图片进入或离开垃圾桶的边界。你可以用波纹管的方法做到这一点:

-(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); 
} 

当拖动结束检查,如果你的观点是内部垃圾桶,并根据结果采取行动。