Question

Quelqu'un pourrait-il s'il vous plaît me dire comment faire apparaître une image lorsque l'utilisateur appuie sur l'écran et le faire apparaître à la position du robinet. Merci d'avance, Tate

Était-ce utile?

La solution

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 NSSet est un des objets de UITouch. UITouch a -locationInView: méthode d'instance qui devrait donner la position du robinet dans votre vue.

Autres conseils

Vous pouvez créer une étoile initiale et il suffit de déplacer chaque vue du temps est touché. Je ne sais pas ce que vous êtes résultat final ressemblera.

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;
    }
}

Il semble implicite de la question que vous voulez que l'utilisateur puisse touchez l'écran et ont une image dessinée où ils robinet? Contrairement à exploiter dans un lieu apparaissent et ayant l'image désignée il?

Si oui, vous allez probablement devoir aller avec une vue personnalisée. Dans ce cas, vous feriez quelque chose comme ce qui suit:

  1. Créer une sous-classe de UIView.
  2. Remplacer la méthode touchesBegan. Appel [[touches anyObject] locationInView:self] (où touches est le premier argument de la méthode, un NSSet d'objets UITouch) pour obtenir l'emplacement du contact, et l'enregistrer.
  3. Remplacer la méthode touchesEnded. Déterminer l'emplacement des touches terminés à l'aide de la même méthode que dans l'étape 2.
  4. Si le second emplacement est à proximité de la première, vous voulez placer votre image à cet endroit. Notez que l'emplacement et appel [self setNeedsDisplay] pour que la vue personnalisée être redessinée.
  5. Remplacer la méthode drawRect. Ici, si l'emplacement a été défini à l'étape 4, vous pouvez utiliser la méthode UIImage drawAtPoint pour dessiner votre image à l'endroit choisi.

Pour plus de détails, ce lien pourrait être le coup d'oeil . Hope qui aide!

EDIT: Je vous ai avis AVONS demandé 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 considéré comme préférable de « bosse » de l'ancien, peut-être en le modifiant pour demander des précisions supplémentaires, plutôt que de créer une nouvelle question.

EDIT: Comme demandé, un exemple de code très bref suit. Ceci est probablement pas le meilleur code autour, et je l'ai pas testé, donc il peut être un peu hasardeux. Juste pour clarifier, le THRESHOLD permet à l'utilisateur de déplacer son doigt un peu en tapotant (jusqu'à 3 pixels), car il est très difficile de robinet sans bouger votre doigt un peu.

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top