I have one ImageView and sticker on it now I want to add Gesture on that sticker, Everything is working properly but ,my sticker is going out from UIImageView's layer as shown in Image. I want sticker's gesture within ImageView's Boundaries only.
Following is my Code:
func addStickers(image: UIImage) {
gesture = "Stickers"
imgSticker = UIImageView(frame: CGRect.init(x: 0.0, y: 0.0, width: 80, height: 80))
imgSticker.center = view.center
imgSticker.image = image
imgSticker.contentMode = UIViewContentMode.scaleAspectFill
imgSticker.isUserInteractionEnabled = true
self.view.addSubview(imgSticker)
//imgImage.addSubview(imgSticker)
panGesture = UIPanGestureRecognizer.init(target: self, action: #selector(handlePanGesture(_:)))
panGesture.delegate = self
pinchGesture = UIPinchGestureRecognizer.init(target: self, action: #selector(handlePinchGesture(_:)))
pinchGesture.delegate = self
rotateGesture = UIRotationGestureRecognizer.init(target: self, action: #selector(handleRotateGesture(_:)))
rotateGesture.delegate = self
imgSticker.addGestureRecognizer(panGesture)
imgSticker.addGestureRecognizer(pinchGesture)
imgSticker.addGestureRecognizer(rotateGesture)
}
I am calling this function and my handle methods as below:
addStickers(image: #imageLiteral(resourceName: "Sticker1.png"))
func handlePanGesture(_ recognizer: UIPanGestureRecognizer) {
if gesture == "Stickers" {
let recognizerCenter = recognizer.location(in: self .view)
imgSticker.center = recognizerCenter
} else {
let recognizerCenter = recognizer.location(in: self.view)
txtLabel.center = recognizerCenter
}
}
func handlePinchGesture(_ recognizer: UIPinchGestureRecognizer) {
if gesture == "Stickers" {
imgSticker.transform = imgSticker.transform.scaledBy(x: recognizer.scale, y: recognizer.scale)
recognizer.scale = 1.0
} else {
txtLabel.transform = txtLabel.transform.scaledBy(x: recognizer.scale, y: recognizer.scale)
recognizer.scale = 1.0
}
}
func handleRotateGesture(_ recognizer: UIRotationGestureRecognizer) {
if gesture == "Stickers" {
imgSticker.transform = imgSticker.transform.rotated(by: recognizer.rotation)
recognizer.rotation = 0.0
} else {
txtLabel.transform = txtLabel.transform.rotated(by: recognizer.rotation)
recognizer.rotation = 0.0
}
}
Try replacing self.view in self.view.addSubview(imgSticker)
to the ImageView of your image that is being edited, the one you put stickers onto it. Hope it helps.
So, it should be like this - imageView.addSubview(stickerOnImg)
. I had same issue before and this worked for me.