2011-12-05 9 views
5

No sé Cómo obtener el siguiente tipo de funcionalidad en mi aplicación.iPhone: ¿Cómo arrastro o muevo UIImage/UIButton como se muestra a continuación?

enter image description here

Como se muestra en la figura de arriba usuario puede deslizar (arrastre) diferentes partes de la imagen y el usuario puede montar la imagen.

¿Alguien puede decirme qué control es esto? O algún tutorial para eso?

+0

Estoy pensando que esto es algo más adecuado para una biblioteca como cocos2d, no UIKit. –

+0

@RichardJ.RossIII: ¿Me puede dar más detalles para coocs2d? o enlace? – iPhone

+0

http://cocos2d-iphone.org –

Respuesta

7

Mira la aplicación de ejemplo moveme. Le mostrará cómo permitir el movimiento de las subvistas al tocar y arrastrar.

A continuación, puede crear imágenes visuales para cada una de las piezas del rompecabezas que se pueden mover.

Una vez que haya logrado esto, debe verificar durante el movimiento de una pieza para ver cuándo se acerca lo suficiente al punto correcto en el rompecabezas para que encaje cuando el usuario suelte la pieza.

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

+0

+1 para un mejor ajuste posible de una aplicación de ejemplo. MoveMe también fue el primer pensamiento que tuve al leer la pregunta. – Till

0

Si hablamos de UIKit, esto podría ser un UIImageView con imágenes que tienen áreas parcialmente transparentes.

+0

¿Pero cómo arrastrar esas imágenes ???? – iPhone

+0

UIKit sería malo porque no está hecho para juegos o cosas similares a los juegos. Supongo que sería mejor usar OpenGL para este –

+0

OpenGL es el mejor para usar en juegos y quizás el más arisco de todos ... al menos para principiantes. COCOS2D será perfecto para comenzar con el desarrollo de juegos 2D. – samfisher

1

Todo depende del tipo de implementación que desee realizar. Puede ser UIImageView, etc. UIButton La ventaja con UIImageView podría ser usted puede implementar fácilmente UIGestureRecognizer para mover los puntos de vista ..

0

Esto no es tan fácil. Primero debe escribir el código de cómo mover las vistas de la imagen. Hay muchas muestras en las referencias de Apple. Entonces necesita obtener los límites de cada imagen para hacer esto.

+0

¡Eso es genial! me puedes enviar muestras en [email protected] – iPhone

1

Para una aplicación construí utilicé las funciones toques:

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

para arrastrar UIImageViews alrededor. Luego puede usar CGRectContainsRect o CGRectContainsPoint para detectar si la pieza del rompecabezas está en la ubicación correcta.

0

Mi primer ataque contra este problema sería la siguiente:

(1) UIImageView subclase para sostener cada pieza del rompecabezas.

(2) Personaliza tu subclase UIImageView inicializando con un UIPanGestureRecognizer. Algo así como:

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

(3) En el método de acción asociada con el reconocedor gesto sartén, actualizar la ubicación del objeto en función de los mensajes de la pieza del rompecabezas reconocedor gesto sartén. Algo parecido a lo siguiente se debe trabajar;

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

Aquí es el código de cómo mover imgTest que es un UIImageView. Probado, funciona como un encanto.

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

Cuestiones relacionadas