J'ai un UIImageView
, que je veux pouvoir redimensionner et faire pivoter, etc.
Un peut-il UIGestureRecognizer
être ajouté au UIImageView
?
Je voudrais ajouter un outil de reconnaissance de rotation et de pincement à un UIImageView
qui serait créé au moment de l'exécution.
Comment ajouter ces outils de reconnaissance?
userInteractionEnabled
doit toujours être réglé sur YES / true dans Xcode 8 Objective-C / SwiftOui, un UIGestureRecognizer peut être ajouté à un UIImageView. Comme indiqué dans l'autre réponse, il est très important de ne pas oublier d'activer l'interaction de l'utilisateur sur la vue d'image en définissant sa
userInteractionEnabled
propriété surYES
. UIImageView hérite de UIView, dont la propriété d'interaction utilisateur est définieYES
par défaut, cependant, la propriété d'interaction utilisateur d'UIImageView est définie surNO
par défaut.À partir de la documentation UIImageView:
Quoi qu'il en soit, sur l'essentiel de la réponse. Voici un exemple de création d'un
UIImageView
avec aUIPinchGestureRecognizer
, aUIRotationGestureRecognizer
et aUIPanGestureRecognizer
.Tout d'abord, dans
viewDidLoad
ou dans une autre méthode de votre choix, créez une vue d'image, donnez-lui une image, un cadre et activez son interaction avec l'utilisateur. Créez ensuite les trois gestes comme suit. Assurez-vous d'utiliser leur propriété de délégué (probablement définie sur self). Cela sera nécessaire pour utiliser plusieurs gestes en même temps.Voici les trois méthodes qui seront appelées lorsque les gestes de votre vue seront détectés. À l'intérieur, nous vérifierons l'état actuel du geste, et s'il est au début ou à la modification,
UIGestureRecognizerState
nous lirons la propriété d'échelle / rotation / translation du geste, appliquerons ces données à une transformation affine, appliquerons la transformation affine à l'image vue, puis réinitialisez l'échelle / rotation / translation des gestes.Enfin et surtout, vous devrez utiliser la méthode UIGestureRecognizerDelegate
gestureRecognizer: shouldRecognizeSimultaneouslyWithGestureRecognizer
pour permettre aux gestes de fonctionner en même temps. Si ces trois gestes sont les trois seuls gestes auxquels cette classe est attribuée comme délégué, vous pouvez simplement revenirYES
comme indiqué ci-dessous. Toutefois, si vous avez des gestes supplémentaires auxquels cette classe est attribuée comme délégué, vous devrez peut-être ajouter une logique à cette méthode pour déterminer quel geste est lequel avant de leur permettre de tous travailler ensemble.N'oubliez pas de vous assurer que votre classe est conforme au protocole UIGestureRecognizerDelegate . Pour ce faire, assurez-vous que votre interface ressemble à ceci:
Si vous préférez jouer vous-même avec le code d'un exemple de projet fonctionnel, l'exemple de projet que j'ai créé contenant ce code est disponible ici.
la source
Swift 4.2
et une fois tapé:
la source
Solution Swift 2.0
Vous créez un outil de reconnaissance de gestes tapotement, pincement ou glissement dans le même manoir. Ci-dessous, je vais vous guider à travers 4 étapes pour que votre reconnaissance soit opérationnelle.
4 étapes
1.) Héritez de
UIGestureRecognizerDelegate
en l'ajoutant à votre signature de classe.2.) Contrôlez le glisser de votre image vers votre viewController pour créer un IBOutlet:
3.) Dans votre viewDidLoad, ajoutez le code suivant:
4.) Créez la fonction qui sera appelée lorsque votre reconnaissance de gestes est activée. (Vous pouvez exclure le
= nil
si vous choisissez).Votre code final devrait ressembler à ceci:
la source
Je viens de faire cela avec swift4 en ajoutant 3 gestes ensemble en vue unique
Voici mon exemple de code
N'importe quelle question, tapez simplement pour commenter. Merci
la source
Exemple SWIFT 3
Aucun délégué de reconnaissance de geste ni aucune autre implémentation si nécessaire.
la source
Vous pouvez également faire glisser un outil de reconnaissance des gestes du toucher vers la vue d'image dans
Storyboard
. Créez ensuite une action parctrl + drag
le code.la source
Pour les amoureux des blocs, vous pouvez utiliser ALActionBlocks pour ajouter une action de gestes dans un bloc
la source