Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 将imageView拖动到另一个视图中_Iphone_Ios_Objective C - Fatal编程技术网

Iphone 将imageView拖动到另一个视图中

Iphone 将imageView拖动到另一个视图中,iphone,ios,objective-c,Iphone,Ios,Objective C,我一直在忙着开发一款游戏,我发现其中一个部分很难。我可能完全不知道该怎么做 我的黑板上有几张图片。它们是我拖动到其中的对象(瓷砖)的持有者。(我也不知道这是最好的还是正确的方法。) 例如,我制作了一个图像来显示我的意思: 在这张图片中,我有一张图片(a),我想把它拖到顶部的一个平铺上,我的代码必须自动检测图片视图(a)的最上方位置,并将其放置到该视图中 我真的被困在这里了,我想了解一些关于如何做这件事或其他类似事情的信息 A已经可以拖动。您可以使用bool-CGRectIntersectsRe

我一直在忙着开发一款游戏,我发现其中一个部分很难。我可能完全不知道该怎么做

我的黑板上有几张图片。它们是我拖动到其中的对象(瓷砖)的持有者。(我也不知道这是最好的还是正确的方法。)

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

在这张图片中,我有一张图片(a),我想把它拖到顶部的一个平铺上,我的代码必须自动检测图片视图(a)的最上方位置,并将其放置到该视图中

我真的被困在这里了,我想了解一些关于如何做这件事或其他类似事情的信息


A已经可以拖动。

您可以使用
bool-CGRectIntersectsRect(CGRect-rectA,CGRect-rect1)(rect1或rect2或3或4)
检查“A”框架是否与四个顶部瓷砖中的任何一个相交

相交后,您可以检查每个磁贴的中心与“A”的中心之间的最小距离,以检查哪个磁贴包含A最多。(All
UIView
has
center
property)

这是假设所有平铺和视图都是单独的视图

或者,再想想,你可以在检查前保持最小距离,检查两个中心之间的最小距离,并完全避免第一步

CGFloat xDist = (p2.x - p1.x);
CGFloat yDist = (p2.y - p1.y);
CGFloat distance = sqrt((xDist * xDist) + (yDist * yDist));
  • 您可以使用上述代码计算两个CG点(中心)之间的距离。从…起 这就是简单的毕达哥拉斯定理
      为您的手势制作属性:

      @property (nonatomic, strong) UILongPressGestureRecognizer *longPress;
      
      初始化它:

      self.longPress = [UILongPressGestureRecognizer initWithTarget:self action:@selector(gestureRecognizedStateDidChanged:)];
      self.longPress.minimumPressDuration = 0.03;
      
      视图控制器类应实现
      协议:

      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设置为一个对象的图像,所以我能将对象的中心和其中一个视图的中心匹配吗?谢谢,是的。你可以将A的中心指定为其中一个瓷砖的中心。谢谢你,我觉得很难理解,但我会保留此代码,同时我会让我的看起来很有希望,谢谢