2011-12-05 3 views
5

Non so Come ottenere il seguente tipo di funzionalità nella mia app.iPhone: come faccio a trascinare o spostare UIImage/UIButton come mostrato di seguito?

enter image description here

Come mostrato nella figura precedente utente può scorrere (drag) diverse parti dell'immagine e l'utente può montare immagine.

Qualcuno può dirmi quale controllo è questo? O qualche tutorial per questo?

+0

Sto pensando questo è qualcosa di più adatto per una libreria come cocos2d, non UIKit. –

+0

@RichardJ.RossIII: Puoi darmi maggiori dettagli su coocs2d? o link? – iPhone

+0

http://cocos2d-iphone.org –

risposta

7

Partenza il campione app moveme. Ti mostrerà come consentire il movimento delle sottoview tramite tocco e trascinamento.

È quindi possibile creare immagini per ciascuna delle parti del puzzle che possono essere spostate.

Una volta completato, è necessario controllare durante il movimento di un pezzo per vedere quando si avvicina abbastanza al punto giusto nel puzzle in modo che possa scattare in posizione quando l'utente lascia il pezzo.

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

+0

+1 per la migliore corrispondenza possibile di un'app di esempio. MoveMe è stato anche il primo pensiero che ho avuto quando ho letto la domanda. – Till

0

Se parliamo di UIKit, questo potrebbe essere un UIImageView con immagini con aree parzialmente trasparenti.

+0

Ma come trascinare le immagini ???? – iPhone

+0

UIKit sarebbe male perché non è fatto per giochi o cose simili ai giochi. Credo che sarebbe meglio usare OpenGL per questo OpenGL –

+0

è il migliore da usare per i giochi e forse il più difficile da usare ... almeno per i principianti. COCOS2D sarà perfetto per iniziare con lo sviluppo di giochi 2D. – samfisher

1

Tutto dipende dal tipo di implementazione che si desidera eseguire. Può essere UIImageView, UIButton ecc Il vantaggio con UIImageView potrebbe essere che si può facilmente implementare UIGestureRecognizer per spostare il punto di vista ..

0

Questo non è così facile. È necessario scrivere prima il codice per come spostare le visualizzazioni dell'immagine. Ci sono molti esempi nei riferimenti Apple. Quindi è necessario ottenere i limiti di ogni immagine per farlo.

+0

Questo è fantastico !! puoi inviarmi dei campioni su [email protected] – iPhone

1

Per un app che ho costruito io ho usato le funzioni tocchi:

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

per il trascinamento UIImageViews intorno. Quindi è possibile utilizzare CGRectContainsRect o CGRectContainsPoint per rilevare se il pezzo del puzzle si trova nella posizione corretta.

0

Il mio primo attacco a questo problema potrebbe essere il seguente:

(1) sottoclasse UIImageView di tenere ogni pezzo del puzzle.

(2) Personalizzate la sottoclasse UIImageView inizializzandola con UIPanGestureRecognizer. Qualcosa di simile:

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

(3) Nel metodo azione associata con il sistema di riconoscimento gesto pan, aggiornare la posizione dell'oggetto in base ai messaggi provenienti da del pezzo di puzzle riconoscitore gesto padella. Qualcosa come il seguente dovrebbe funzionare:

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

Ecco il codice come muoversi imgTest che è un UIImageView. Testato, funziona come un fascino.

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