2017-09-11 2 views
1

J'ai un ImageView et un autocollant dessus maintenant je veux ajouter Gesture sur cet autocollant, Tout fonctionne correctement mais, mon autocollant sort de la couche de UIImageView comme indiqué dans l'image. Je veux seulement un geste d'autocollant dans les limites d'ImageView.UIImageView avec autocollant et ajout de mouvement sur l'autocollant

enter image description here

Après mon 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) 
} 

J'appelle cette fonction et mes méthodes de poignée comme ci-dessous:

   addStickers(image: #imageLiteral(resourceName: "Sticker1.png")) 

func handlePanGesture (_ reconnaisseur: 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 
    } 

} 
+0

J'aborde actuellement le même problème. Pas beaucoup de temps passé jusqu'ici, mais voici un lien potentiellement utile - l'astuce consiste à * écrire * le code pour le garder dans les limites que vous voulez qu'il reste. https://stackoverflow.com/questions/16460229/why-a-subview-wont-stay-in-the-parent-frame#16460566 (Il semble que les exemples de codes - oui, pluriel - se comportent tous comme ça aussi.) – dfd

Répondre

1

Essayez de remplacer par l'auto-visualisation dans self.view.addSubview(imgSticker) sur l'ImageView de l'image en cours d'édition, celle sur laquelle vous avez placé des autocollants. J'espère que cela aide. Donc, cela devrait être comme ceci: imageView.addSubview(stickerOnImg). J'ai eu le même problème avant et cela a fonctionné pour moi.