Je crée une application de dessin simple et je voudrais de l'aide pour dessiner des rectangles basés sur les événements tactiles de l'utilisateur. Je suis en mesure de dessiner un rectangle en utilisant Core Graphics à partir du point dans touchesBegan au point dans touchesEnded. Ce rectangle est ensuite affiché une fois que l'événement touchesEnded est déclenché. Cependant, je voudrais pouvoir le faire de manière «live». Ce qui signifie que le rectangle est mis à jour et affiché lorsque l'utilisateur fait glisser son doigt. Est-ce possible? Toute aide serait grandement appréciée, merci!Dessiner un rectangle en utilisant Core Graphics avec un aperçu en direct
MISE À JOUR:
j'ai pu obtenir que cela fonctionne en utilisant le code suivant. Il fonctionne parfaitement bien pour les petites images, mais il devient très lent pour les grandes images. Je réalise que ma solution est extrêmement inefficace et je me demandais si quelqu'un pouvait proposer une meilleure solution. Merci.
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
_firstPoint = [touch locationInView:self.view];
_firstPoint.y -= 40;
_lastPoint = _firstPoint;
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint currentPoint = [touch locationInView:self.view];
currentPoint.y -= 40;
[self drawSquareFrom:_firstPoint to:currentPoint];
_lastPoint = currentPoint;
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint currentPoint = [touch locationInView:self.view];
currentPoint.y -= 40;
[self drawSquareFrom:_firstPoint to:currentPoint];
[_modifiedImage release];
_modifiedImage = [[UIImage alloc] initWithCGImage:_imageView.image.CGImage];
}
- (void)drawSquareFrom:(CGPoint)firstPoint to:(CGPoint)lastPoint
{
_imageView.image = _modifiedImage;
CGFloat width = lastPoint.x - firstPoint.x;
CGFloat height = lastPoint.y - firstPoint.y;
_path = [UIBezierPath bezierPathWithRect:CGRectMake(firstPoint.x, firstPoint.y, width, height)];
UIGraphicsBeginImageContext(_originalImage.size);
[_imageView.image drawInRect:CGRectMake(0, 0, _originalImage.size.width, _originalImage.size.height)];
_path.lineWidth = 10;
[[UIColor redColor] setStroke];
[[UIColor clearColor] setFill];
[_path fill];
[_path stroke];
_imageView.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}
(c'est-à-dire Illustrator ou Photoshop) Dans ce cas, vous pouvez facilement ajouter un CAShapeLayer avec un chemin rectangulaire à votre document temporairement ... le valider dans votre document lorsque l'utilisateur a fini de le faire glisser. – nielsbot
Dans tous les cas, vous pouvez prévisualiser votre rectangle en utilisant un CAShapeLayer avec un chemin rectangulaire sur votre image actuelle dans votre document. – nielsbot