Faire des images apparaissent ... Comment?
-
24-10-2019 - |
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
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:
- Créer une sous-classe de
UIView
. - Remplacer la méthode
touchesBegan
. Appel[[touches anyObject] locationInView:self]
(oùtouches
est le premier argument de la méthode, unNSSet
d'objetsUITouch
) pour obtenir l'emplacement du contact, et l'enregistrer. - 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. - 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. - Remplacer la méthode
drawRect
. Ici, si l'emplacement a été défini à l'étape 4, vous pouvez utiliser la méthodeUIImage
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