ios - dibujar y mover la imagen sobre uiimageview-Swift
uiimage swift 4 (2)
Estoy tratando de implementar la manipulación simple de imágenes en Swift, quiero dibujar sobre la imagen de UIImageView.
Entonces la interfaz será como está en la siguiente imagen:
al hacer clic en el lado negativo de Emoji, quiero arrastrarlo y soltarlo en la vista de la imagen, o solo hacer clic lo moverá a la vista de uiimage,
Luego se puede mover dentro de la vista de uiimage y guardar la imagen completa en galery.
No pude encontrar una fuente útil sobre esto en google.
Entonces, ¿por dónde empezar con esto?
Si el emoji es un UIImageView
, puede implementar touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?)
. A continuación, es donde mainImageView es la vista en la que desea agregar los emoji.
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
let touch = event?.allTouches()?.first
let touchLocation = touch?.locationInView(self.view)
if(CGRectContainsPoint(emojiImageView?.frame, touchLocation)) {
//your emoji imageView has been selected.
addImageviewToMainImageView(emojiImageView)
}
}
func addImageviewToMainImageview(imageView: UIImageView!) {
imageView.removeFromSuperView()
let origin = CGPoint(mainImageView.center.x , mainImageView.center.y)
let frame = CGRect(origin.x, origin.y, imageView.frame.size.width, imageView.frame.size.height)
imageView.frame = frame
mainImageView.addSubview(imageView)
}
Si desea mover el emojiImageView
dentro de la mainImageView
, debe subclase UIView
para implementar touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?)
Y touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?)
En una manera similar.
1) Detecta el toque con touchesBegan
, determina si se ha tocado una de las mainImageView
de la mainImageView
principal. Establezca una referencia a esta subvista.
2) Si se ha tocado una subvista, touchesMoved
usará esa referencia para determinar la nueva ubicación de la subvista:
let touch = event?.allTouches()?.first
let touchLocation = touch?.locationInView(self)
selectedSubview.center = touchLocation
Use el siguiente código para combinar 2 imágenes, no estoy agregando código para arrastrar y soltar algo.
UIImage *mainImage = firstImage;
UIImage *smallImage = secondImage;
CGPoint renderingPoint = CGPointMake(50,50);
UIImage *outputImage = nil;
if (smallImage.size.width > mainImage.size.width || smallImage.size.height > mainImage.size.height)
{
return smallImage;
}
UIGraphicsBeginImageContext(firstImage.size);
[firstImage drawAtPoint:CGPointMake(0,0)];
[secondImage drawAtPoint:renderingPoint];
outputImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
La imagen de salida aquí es salida de 2 imágenes combinadas. El renderingPoint es el punto en el que desea comenzar a dibujar otra imagen.
Simplemente agregue los métodos de toques y obtenga el punto en el que termina el toque, manteniendo ese punto como punto central y usando el ancho de la imagen pequeña, puede calcular su punto de representación.
Además, tenga en cuenta que aquí el renderingPoint se refiere al tamaño original de la imagen, no al tamaño de la vista de la imagen, por lo tanto, haga los cálculos correspondientes para ampliar o reducir la imagen.