将一个 imageView 拖入另一个

Posted

技术标签:

【中文标题】将一个 imageView 拖入另一个【英文标题】:Dragging a imageView into another 【发布时间】:2013-02-27 15:23:28 【问题描述】:

我一直忙于尝试开发一款游戏,但我遇到了一个我觉得困难的部分。我可能完全不知道如何做到这一点。

我的板上有几个图像视图。它们是我拖入其中的对象(瓷砖)的持有者。 (同样,我不知道这是最好的还是正确的方法。)

例如,我制作了一张图片来显示我的意思:

在此图像中,我有一个图像 (A),我想将其拖到顶部的 1 个图块上,我的代码必须自动检测 (A) 位于哪个图像视图上方并将其放置到该视图中。

我真的被困在了这里,我想了解一些有关如何以这种方式或以其他方式执行此类操作的信息。

A 已经可以拖动了。

【问题讨论】:

【参考方案1】:

您可以使用bool CGRectIntersectsRect (CGRect rectA,CGRect rect1);(rect1 或 rect2 或 3 或 4) 检查“A”的框架与四个顶部图块中的任何一个的交叉点。

相交后,您可以检查每个图块中心与“A”中心之间的最小距离,以检查哪个图块包含最多的 A。(所有UIView 具有center 属性)

这是假设所有图块和 A 都是单独的视图。

或者再三考虑,您可以在检查之前检查中心之间的最小距离,保持最小距离,并完全避免第一步。

CGFloat xDist = (p2.x - p1.x);
CGFloat yDist = (p2.y - p1.y);
CGFloat distance = sqrt((xDist * xDist) + (yDist * yDist));
您可以使用上面的代码计算两个CGPoints(中心)之间的距离。从 How to find the distance between two CG points? 它是简单的勾股定理。 :)

【讨论】:

谢谢你。这对我来说也是最合乎逻辑的,因为我今天在工作中强调了这一点。我不想将图像视图设置为 A 的图像,所以我能否将 A 对象的中心与其中一个视图的中心匹配?谢谢。 是的。您可以将 A 的中心指定为其中一个图块的中心之一。【参考方案2】:

为你的手势创建属性:

@property (nonatomic, strong) UILongPressGestureRecognizer *longPress;

初始化它:

self.longPress = [UILongPressGestureRecognizer initWithTarget:self action:@selector(gestureRecognizedStateDidChanged:)];
self.longPress.minimumPressDuration = 0.03;

您的视图控制器类应该实现<UIGestureRecognizerDelegate> 协议:

self.longPress.delegate = self;

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)sender 
return CGRectContainsPoint(self.targetImage.frame, [sender locationInView:self.view]);


- (void)gestureRecognizedStateDidChanged:(UILongPressGestureRecognizer *)sender 
switch (recognizer.state) 
        case UIGestureRecognizerStatePossible:
        case UIGestureRecognizerStateBegan: 
        // did started, you can pick up your view
        self.targerImageView.center = [sender locationInView:self.view];
        break;
    
    case UIGestureRecognizerStateFailed:
    case UIGestureRecognizerStateCancelled:
    case UIGestureRecognizerStateEnded: 
        // drop callback, bring you view home or to target
        if (CGRectContainsPoint(self.toDropImageViews.frame, [sender locationInView:self.view]) 
            // do you drop code here
        
        break;
    
    case UIGestureRecognizerStateChanged: 
        self.targerImageView.center = [sender locationInView:self.view];
        // moving callback
        break;
        
    

【讨论】:

谢谢你,这很难理解,但我会保留这段代码,同时让我的代码看起来很有希望谢谢

以上是关于将一个 imageView 拖入另一个的主要内容,如果未能解决你的问题,请参考以下文章

如何将一个div拖入另一个div里?

iOS 绘制虚线

拖入另一个进程

如何将 ImageViews 放在另一个 ImageView 之上?

根据来自服务器的图像调整imageview大小,然后调整其他标签

android imageview id,在ImageView中获取可绘制的ID