ios swift uiimageview uiimage

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.