2010-06-03 4 views
1

Quelqu'un pourrait me dire comment faire apparaître une image lorsque l'utilisateur tape l'écran et le faire apparaître à la position du robinet. Merci à l'avance, TateFaire apparaître des images ... Comment?

+0

S'il vous plaît ne pas répéter les questions. Vous pouvez éditer votre existant, ce qui le fera grimper au sommet du quese actif et éventuellement obtenir plus d'attention, et (une fois que vous avez accumulé quelques rep), vous pouvez offrir une prime. Je vais signaler cela pour les modérateurs en tant que candidat à la fusion, mais pour référence future ** ne faites pas cela! ** – dmckee

+0

Oui, s'il vous plaît ne postez pas de doublons. J'ai fusionné vos deux questions ensemble. Vous pouvez toujours modifier vos propres messages, peu importe la réputation que vous avez. Vous pouvez également laisser des commentaires sur vos propres questions et réponses à vos questions. Veuillez donc utiliser des commentaires plutôt que des réponses, le cas échéant. Voir la [FAQ] (http://stackoverflow.com/faq) pour plus de détails. –

Répondre

2

UIView est une sous-classe de UIResponder, qui a les méthodes suivantes qui pourraient aider: -touchesBegan:withEvent:, -touchesEnded:withEvent:, -touchesCancelled:withEvent: et -touchesMoved:withEvent:.

Le premier paramètre de chacun de ces objets est NSSet de UITouch. UITouch a une méthode d'instance -locationInView: qui devrait donner la position du robinet dans votre vue.

0

Il semble implicite à la question que vous voulez que l'utilisateur puisse appuyer n'importe où sur l'écran et dessiner une image sur laquelle il tapera? Par opposition à tapoter dans un endroit désigné et avoir l'image apparaître là?

Si c'est le cas, vous allez probablement devoir utiliser une vue personnalisée. Dans ce cas, vous devriez faire quelque chose comme:

  1. Créer une sous-classe de UIView. Remplacer la méthode touchesBegan par la méthode
  2. . Appelez [[touches anyObject] locationInView:self] (où touches est le premier argument de la méthode, un NSSet de UITouch objets) pour obtenir l'emplacement de la touche, et l'enregistrer. Remplacez la méthode touchesEnded par la méthode
  3. . Déterminez que les touches de localisation se sont terminées en utilisant la même méthode qu'à l'étape 2.
  4. Si le second emplacement est proche du premier, vous devez placer votre image à cet emplacement. Notez cet emplacement et appelez [self setNeedsDisplay] pour que l'affichage personnalisé soit redessiné. Remplacez la méthode drawRect par
  5. . Ici, si l'emplacement a été défini à l'étape 4, vous pouvez utiliser la méthode UIImagedrawAtPoint pour dessiner votre image à l'emplacement sélectionné.

For further details, this link might be worth a look. J'espère que cela pourra aider!

EDIT: J'ai remarqué que vous avez posé essentiellement la même question avant. Si vous n'êtes pas satisfait des réponses qui y sont données, il est généralement préférable de remplacer l'ancienne, peut-être en la modifiant pour demander des précisions, plutôt que de créer une nouvelle question.

EDIT: Comme demandé, un exemple de code très court suit. Ce n'est probablement pas le meilleur code autour, et je ne l'ai pas testé, donc ça peut être un peu incertain. Juste pour clarifier, le THRESHOLD permet à l'utilisateur de bouger son doigt un peu en tapant (jusqu'à 3px), car il est très difficile de taper sans bouger un peu le doigt.

MyView.h

#define THRESHOLD 3*3 

@interface MyView : UIView 
{ 
    CGPoint touchPoint; 
    CGPoint drawPoint; 
    UIImage theImage; 
} 

@end 

MyView.m

@implementation MyView 

- (id) initWithFrame:(CGRect) newFrame 
{ 
    if (self = [super initWithFrame:newFrame]) 
    { 
     touchPoint = CGPointZero; 
     drawPoint = CGPointMake(-1, -1); 
     theImage = [[UIImage imageNamed:@"myImage.png"] retain]; 
    } 

    return self; 
} 

- (void) dealloc 
{ 
    [theImage release]; 
    [super dealloc]; 
} 

- (void) drawRect:(CGRect) rect 
{ 
    if (drawPoint.x > -1 && drawPoint.y > -1) 
     [theImage drawAtPoint:drawPoint]; 
} 

- (void) touchesBegan:(NSSet*) touches withEvent:(UIEvent*) event 
{ 
    touchPoint = [[touches anyObject] locationInView:self]; 
} 

- (void) touchesEnded:(NSSet*) touches withEvent:(UIEvent*) event 
{ 
    CGPoint point = [[touches anyObject] locationInView:self]; 
    CGFloat dx = point.x - touchPoint.x, dy = point.y - touchPoint.y; 

    if (dx + dy < THRESHOLD) 
    { 
     drawPoint = point; 
     [self setNeedsDisplay]; 
    } 
} 

@end 
1

Vous pouvez créer une étoile initiale et il suffit de déplacer chaque vue du temps est touché. Je ne suis pas sûr de savoir à quoi ressemblera votre résultat final.

Note: Ce code vous donnera 1 étoile qui se déplace avec un robinet Voici mon code: -

(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    NSSet *allTouches = [event allTouches]; 
    switch ([allTouches count]) { 
     case 1: 
     { 
      UITouch *touch = [[allTouches allObjects] objectAtIndex:0]; 
      CGPoint point = [touch locationInView:myView]; 
      myStar.center = point; 
      break; 
     } 
     default: 
      break; 
    } 
} 
Questions connexes