【问题标题】:iPhone : How do I drag or move UIImage/UIButton as shown below?iPhone:如何拖动或移动 UIImage/UIButton,如下所示?
【发布时间】:2012-01-13 09:16:21
【问题描述】:

我不知道如何在我的应用中获得以下类型的功能。

如上图所示,用户可以滑动(拖动)不同的图像部分,用户可以组装图像。

谁能告诉我这是哪个控件?或者有什么教程吗?

【问题讨论】:

  • 我认为这更适合 cocos2d 之类的库,而不是 UIKit。
  • @RichardJ.RossIII:你能给我更多关于 coocs2d 的细节吗?或链接?
  • 你确定只有cocos2d才能做到吗?
  • 不,不是“唯一可能的”——@RichardJ.RossIII 说“更合适”——如果你愿意,你可以用 UIKit 做到这一点。

标签: iphone objective-c ios cocoa-touch ios4


【解决方案1】:

查看 MoveMe 示例应用。它将向您展示如何允许通过触摸和拖动来移动子视图。

然后,您可以为每个可以移动的拼图创建图像视图。

完成此操作后,您需要在棋子的移动过程中进行检查,以查看它何时足够接近拼图中的正确位置,以便在用户放开棋子时卡入到位。

http://developer.apple.com/library/ios/#samplecode/MoveMe/Introduction/Intro.html

【讨论】:

  • +1 以最适合示例应用程序。 MoveMe 也是我阅读问题时的第一个想法。
【解决方案2】:

这一切都取决于您想要执行的实施类型。 它可以是 UIImageView、UIbutton 等。 UIIMageView 的优势可能是您可以轻松实现 UIGestureRecognizer 来移动视图..

【讨论】:

    【解决方案3】:

    对于我构建的应用程序,我使用了触摸功能:

    - (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event 
    - (void) touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event
    - (void) touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event 
    

    用于拖动 UIImageViews。然后您可以使用 CGRectContainsRect 或 CGRectContainsPoint 来检测拼图是否在正确的位置。

    【讨论】:

      【解决方案4】:

      如果我们谈论 UIKit, 这可能是一个带有部分透明区域的图像的 UIImageView。

      【讨论】:

      • UIKit 会很糟糕,因为它不是为游戏或类似游戏的东西而设计的。我想最好为此使用 OpenGL
      • OpenGL 是最适合用于游戏的,也许是最适合使用的……至少对于初学者而言。 COCOS2D 将是 2D 游戏开发的完美起点。
      【解决方案5】:

      我对这个问题的第一次攻击如下:

      (1) 子类 UIImageView 来保存每个拼图。

      (2) 通过使用 UIPanGestureRecognizer 初始化 UIImageView 子类来自定义它。比如:

      self.panRecognizer = 
        [[UIPanGestureRecognizer alloc] 
          initWithTarget: self 
          action: @selector(handlePan:)];
      [self addGestureRecognizer: 
        self.panRecognizer];
      

      (3) 在与平移手势识别器关联的操作方法中,根据来自拼图的平移手势识别器的消息更新对象的位置。像下面这样的东西应该可以工作:

      -(void) handlePan: 
        (UIGestureRecognizer *)sender
      {
        UIPanGestureRecognizer *panRecognizer = 
          (UIPanGestureRecognizer *)sender;
        if (panRecognizer.state == 
              UIGestureRecognizerStateBegan ||
            panRecognizer.state == 
              UIGestureRecognizerStateChanged)
        {
          CGPoint currentPoint = 
            self.center;
          CGPoint translation = 
            [panRecognizer translationInView: 
              self.superView];
          self.center = CGPointMake
            (currentPoint.x + translation.x, 
              currentPoint.y + translation.y);
          [panRecognizer setTranslation: CGPointZero 
            inView: self.superView];
        }
      } 
      

      【讨论】:

        【解决方案6】:

        这并不容易。您需要先编写代码以了解如何移动图像视图。 Apple 参考资料中有很多示例。然后你需要获取每个图像的边界来执行此操作。

        【讨论】:

        • 太好了!!你能给我寄样品到 dshah3888@gmail.com
        【解决方案7】:

        这里是如何移动 UIImageView 的 imgTest 的代码。经过测试,像魅力一样工作。

        [[self imgTest]setUserInteractionEnabled:YES];
        
        //Save the first touch point
        CGPoint firstTouchPoint;
        
        //xd,yd destance between imge center and my touch center
        float xd;
        float yd;
        
        -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
        {
            UITouch* bTouch = [touches anyObject];
            if ([bTouch.view isEqual:[self imgTest]]) {
                firstTouchPoint = [bTouch locationInView:[self view]];
                xd = firstTouchPoint.x - [[bTouch view]center].x;
                yd = firstTouchPoint.y - [[bTouch view]center].y;
            }
        }
        
        {
            UITouch* mTouch = [touches anyObject];
            if (mTouch.view == [self imgTest]) {
                CGPoint cp = [mTouch locationInView:[self view]];
                [[mTouch view]setCenter:CGPointMake(cp.x-xd, cp.y-yd)];
            }
        }
        

        source

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-26
          • 2011-07-28
          • 1970-01-01
          相关资源
          最近更新 更多