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

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

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

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

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

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

A 已经可以拖动了。

【问题讨论】:

    标签: iphone ios objective-c


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

    【讨论】:

    • 谢谢你。这对我来说也是最合乎逻辑的,因为我今天在工作中强调了这一点。我不想将图像视图设置为 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;
            }
        }
    

    【讨论】:

    • 谢谢你,这很难理解,但我会保留这段代码,同时让我的代码看起来很有希望谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 2014-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多