web-dev-qa-db-fra.com

Swift 3 - Vue d'image avec Tap Gesture

J'ai des problèmes avec l'utilisation d'un geste de tapotement que j'ai mis sur une vue d'image. L'image est actuellement stockée dans les actifs sous le nom 'ActionLiked' et j'ai défini la vue d'image sur cette image. Il est ensuite rendu dans une vue de table dynamique basée sur JSON (elle se répète donc pour chaque élément que je mets dans un tableau JSON). J'ai ajouté le geste de tapotement pour imprimer 'TAPPED' chaque fois que je clique dessus, cependant, il ne semble pas fonctionner tout le temps - 7 éléments actuellement dans le tableau, le geste de tapotement fonctionnera le 1 puis ne fonctionnera pas le 2 suivant puis travaillez sur le 4ème et répétez ce motif

POINT 1 - TRAVAIL POINT 2 - PAS DE TRAVAIL POINT 3 - PAS DE TRAVAIL POINT 4 - TRAVAIL POINT 5 - PAS DE TRAVAIL POINT 6 - PAS DE TRAVAIL POINT 7 - TRAVAIL

Je reçois une erreur dans ma console de débogage Impossible de charger l’image "" référencée à partir d’une plume dans le paquet portant l’identificateur Mais l’image apparaît correctement sur chacune d’elles, mais ne reconnaît pas le geste de tapotement?

4
Chad

Le code suivant peut vous aider davantage avec Swift 4

Comme vous avez dit que vous souhaitiez détecter une image tapotée sur une table, veuillez consulter le code suivant:

let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(ViewController.connected(_:)))

    cell.yourImageView.isUserInteractionEnabled = true
    cell.yourImageView.tag = indexPath.row
    cell.yourImageView.addGestureRecognizer(tapGestureRecognizer)

Et ajoutez la méthode ci-dessous à votre ViewController

@Obj func connected(_ sender:AnyObject){
     print("you tap image number : \(sender.view.tag)")
}
23
Maddyヅヅ

Veuillez cocher isUserInteractionEnabled de UIImageView est true

7
Muhammad Raza

J'ai récemment eu un problème qui semble similaire au vôtre. J'avais plusieurs images auxquelles je voulais toutes répondre de la même manière chaque fois que l'utilisateur les exploitait. Après quelques expériences, il m'est apparu clairement que chaque image devait avoir sa propre instance UITapGestureRecognizer. J'ai fini par utiliser un code comme celui-ci, ce qui garantissait que chaque image répondait au tapotement:

for imageView in imageViews {
    let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(tapResponse))
    imageView.addGestureRecognizer(tapGestureRecognizer)
    imageView.isUserInteractionEnabled = true
}
2
Joey deVilla

L'idée est que vous devez créer un identificateur de geste unique pour chaque UIImageView.

let gestureRecognizerOne = UITapGestureRecognizer(target: self, action: #selector(tap))
firstImageView.addGestureRecognizer(gestureRecognizerOne)

let gestureRecognizerTwo = UITapGestureRecognizer(target: self, action: #selector(tap))
secondImageView.addGestureRecognizer(gestureRecognizerTwo)

Mais je n'ai pas vu votre code, alors peut-être devriez-vous le créer en boucle ou quelque chose comme ça.

0
Aleksandr Honcharov