iPhone:如何拖放或移动UIImage / UIButton如下所示?

我不知道如何在我的应用程序中获得以下types的function。

在这里输入图像说明

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

任何人都可以告诉我这是什么控制吗? 或者任何教程呢?

查看MoveMe示例应用程序。 它会告诉你如何通过触摸和拖动允许子视图的移动。

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

一旦你完成了这个,你需要检查一个棋子移动时,看看它什么时候足够接近它是在拼图正确的位置,所以当用户放开棋子时,它可以卡入到位。

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

这一切都取决于你想要做什么样的实施。 它可以是UIImageView,UIbutton等与UIIMageView的优势可以是你可以很容易地实现UIGestureRecognizer移动的意见..

对于我build立的应用程序,我使用触摸function:

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

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

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

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

(1)UIImageView的子类来保存每一块拼图。

(2)通过用UIPanGestureRecognizer初始化你的UIImageView子类来定制你的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];  } } 

这并不容易。 您需要先编写代码,以便如何移动图像视图。 苹果引用中有很多样本。 那么你需要得到每个图像的边界来做到这一点。

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

 [[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)]; } } 

资源