我一直忙于尝试开发一款游戏,并且我发现了其中一个困难的部分。我可能完全不知道如何做到这一点。
我的板上有几个图像视图。它们是我拖入其中的对象(瓷砖)的持有者。(同样,我不知道这是最好的还是正确的方法。)
例如,我制作了一张图片来显示我的意思:
在此图像中,我有一个图像 (A),我想将其拖到顶部的 1 个图块上,我的代码必须自动检测 (A) 位于哪个图像视图上方并将其放置到该视图中。
我真的被困在这里,我想要一些关于如何以这种方式或另一种方式做这样的事情的信息。
A 已经可以拖动了。
我一直忙于尝试开发一款游戏,并且我发现了其中一个困难的部分。我可能完全不知道如何做到这一点。
我的板上有几个图像视图。它们是我拖入其中的对象(瓷砖)的持有者。(同样,我不知道这是最好的还是正确的方法。)
例如,我制作了一张图片来显示我的意思:
在此图像中,我有一个图像 (A),我想将其拖到顶部的 1 个图块上,我的代码必须自动检测 (A) 位于哪个图像视图上方并将其放置到该视图中。
我真的被困在这里,我想要一些关于如何以这种方式或另一种方式做这样的事情的信息。
A 已经可以拖动了。
您可以使用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));
为您的手势创建属性:
@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;
}
}