2011-12-05 76 views
5

我不知道如何在我的應用程序中獲得以下類型的功能。iPhone:如何拖放或移動UIImage/UIButton,如下所示?

enter image description here

如上圖所示的用戶可以滑動(拖曳)不同圖像部分和用戶可組裝圖像。

任何一個可以告訴我這是控制這個?或者它的任何教程?

+0

我想這是一件更適合喜歡cocos2d的,不是的UIKit庫。 –

+0

@RichardJ。RossIII:你能給我更多關於coocs2d的細節嗎?或鏈接? – iPhone

+0

http://cocos2d-iphone.org –

回答

7

檢查出MoveMe示例應用程序。它會告訴你如何通過觸摸和拖動來允許子視圖的移動。

然後,您可以創建爲每個拼圖碎片,可以到處移動imageViews。

一旦你做到了這一點,你需要一塊移動的過程中進行檢查,看時,得到足夠接近它在拼圖正確的位置,因此它可以卡到位時,那麼用戶放開一片。

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

+0

+1爲最佳可能的示例應用程序。 MoveMe也是我閱讀這個問題時的第一個想法。 – Till

0

如果我們談論的UIKit, 這可能是具有部分透明區域圖像的UIImageView。

+0

但如何拖動該圖像? – iPhone

+0

UIKit會很糟糕,因爲它不是用於遊戲或類似遊戲的東西。我猜這是最好使用OpenGL的 –

+0

OpenGL是用於遊戲的最佳選擇,也許是所有人都非常喜歡使用...至少適合初學者。 COCOS2D將是開始2D遊戲開發的完美之選。 – samfisher

1

這一切都取決於你想要做的一種實現。 它可以是UIImageView,UIbutton等 與UIIMageView的優勢可以是你可以很容易地實現UIGestureRecognizer移動的意見..

0

這並不容易。您需要先編寫代碼以獲取如何移動圖像視圖。 Apple參考文獻中有很多樣本。然後你需要獲得每個圖像的邊界來做到這一點。

+0

好極了!你可以寄給我樣品[email protected] – iPhone

1

對於一個應用程序,我建我使用的觸摸功能:

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

用於拖拽的UIImageViews。然後,您可以使用CGRectContainsRect或CGRectContainsPoint來檢測拼圖是否在正確的位置。

0

我對這個問題的第一次進攻就如下:

(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]; 
  } 
} 
0

這裏是代碼如何移動imgTest這是一個UIImageView。經過測試,像魅力一樣工作。

[[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