2013-02-27 53 views
1

我一直忙于开发一款游戏,而且我在其中一个难以找到的部分。我可能完全处于如何做到这一点的错误之处。将imageView拖入另一个

我有什么是在我的董事会几个图像。他们是我拖入其中的物体(瓷砖)的持有者。 (同样,我不知道这是不是最好的或做的正确方法。)

比如我做了一个形象,以显示我的意思:

在这张照片我有一个形象(A)我想拖动到顶部瓷砖中的一个,我的代码必须自动检测(A)最常见的图像视图并将其放置在该视图中。

enter image description here

我真是坚持在这里,我想就如何到这个或其他做这样的事情的方式的一些信息。

A已经可以拖动。

回答

2

您可以使用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)); 
+0

感谢你为这个。对我来说这听起来最合乎逻辑,正如我今天在工作中谈到的那样。我不想将imageview设置为A的图像,因此我能够将A对象的中心与其中一个视图的中心进行匹配?谢谢。 – Kevin 2013-02-28 02:06:07

+0

是的。您可以将A的中心指定为其中一个瓷砖的中心之一。 – Rakesh 2013-02-28 02:30:03

1

使物业为您的手势:

@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; 
     } 
    } 
+0

谢谢你的这个发现很难理解,但我会保持这段代码,而即时通讯让我看起来很有前途感谢 – Kevin 2013-02-28 02:06:46

相关问题