0
votes

Hey everyone. I've searched the web and really haven't found a problem quite like this. My set up is as follows: I am trying to make an app where a user drags uiimageviewss on a uiview inside a uiscrollview (which can zoom in), but also drag the image to a trashcan to be deleted. When the scrollview is zoomed in, the user can still drag because I have subclassed uiimageview and overridden the touchesMoved method. I want the user to be able to drag the uiimageviews to a trashcan in the bottom right corner of the screen. What I implemented already works when the uiscrollview is normal zoom scale, but when you zoom in you cannot drag the image to the trashcan, because well, the trashcan is a subview of the controller's view itself (this was so that it wouldn't zoom with the uiview) and of course is not in the right coordinates of the screen for the uiscrollview.

I've found a view method called ConvertRect that converts a rectangle to the coordinates of whatever view you give to the method, but this doesn't seem to be working. I do a check within each mapimage(the imageview subclass) that checks the frame of the uiimageview intersects the frame of the trashcan. So I try this method before I do that check, but like I said it doesn't seem to be working.

So with all that complicatedness, let me say in a nutshell my problem. I want to drag images over to a trashcan regardless of what zoom level at uiscrollview is at. I can make the trashcan part of the uiscrollview but I need a way to make it keep in the bottom right corner and also not zoom when the uiscrollview does. Any ideas would be so greatly appreciated, thanks guys. :)

1

1 Answers

0
votes

I had the exact same challenge.

In can just describe it in short:

When you start dragging the image REMOVE it from the UISCrollView and add it as a subview the the main view of your ViewController.

make sure that the image won't get lost in the process (means: someone still retaining it).

While dragging, constantly check to see if your image entered or left the boundaries of the trash can. you can do it with the method bellow:

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

When the method rectIntersectBounds is just a simple extension method for UIView class that i wrote:

-(BOOL) rectIntersectBounds : (CGRect) rect
{
    return CGRectIntersectsRect(self.bounds, rect);
}

When the drag ended check if your view is inside the trash can, and act according to the result.