【问题标题】:Dragging uiimageview into a "trashcan" while zoomed in on a uiscrollview放大 uiscrollview 时将 uiimageview 拖入“垃圾箱”
【发布时间】:2010-10-24 17:43:50
【问题描述】:

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

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

因此,尽管如此复杂,让我简单地说一下我的问题。无论 uiscrollview 的缩放级别如何,我都想将图像拖到垃圾桶。我可以让垃圾桶成为 uiscrollview 的一部分,但我需要一种方法让它保持在右下角,并且在 uiscrollview 时也不会缩放。任何想法将不胜感激,谢谢大家。 :)

【问题讨论】:

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


    【解决方案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);
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多