web-dev-qa-db-fra.com

Reconnaissance des gestes (balayage) sur UIImageView

J'essaie de NSLog lorsque je glisse sur un UIImageView avec ce code, mais cela ne fonctionne pas pour une raison quelconque. Une idée ?

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIImage *image = [UIImage imageNamed:@"image2.png"];
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];

    imageView.frame = [[UIScreen mainScreen] bounds];

    [self.view addSubview:imageView];

    UISwipeGestureRecognizer *recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(rightSwipeHandle:)];
    [recognizer setNumberOfTouchesRequired:1];
    [imageView addGestureRecognizer:recognizer];

}

- (void)rightSwipeHandle:(UISwipeGestureRecognizer*)gestureRecognizer {
    NSLog(@"right swipe");
}
32
Sucrenoir

Activer Interaction utilisateur entre la vue UIImage qui est désactivé par défaut.

[imageView setUserInteractionEnabled:YES];

Ajout d'un événement de geste de balayage

UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];
UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];

// Setting the swipe direction.
[swipeLeft setDirection:UISwipeGestureRecognizerDirectionLeft];
[swipeRight setDirection:UISwipeGestureRecognizerDirectionRight];

// Adding the swipe gesture on image view
[imageView addGestureRecognizer:swipeLeft];
[imageView addGestureRecognizer:swipeRight];

Gestion des événements de balayage

- (void)handleSwipe:(UISwipeGestureRecognizer *)swipe {

    if (swipe.direction == UISwipeGestureRecognizerDirectionLeft) {
        NSLog(@"Left Swipe");
    }

    if (swipe.direction == UISwipeGestureRecognizerDirectionRight) {
        NSLog(@"Right Swipe");   
    } 

}
102
icodebuster

Assurez-vous d’ajouter imageView.userInteractionEnabled = YES; après avoir créé votre UIImageView. 

Cela permet aux utilisateurs de interagir avec votre vue, par exemple en tapotant, en faisant glisser, en glissant votre doigt ou tout autre geste général. 

Voir la documentation ici .

9
user2628644

Dans Swift 3 

ImageView.isUserInteractionEnabled = true
let swipeGesture = UISwipeGestureRecognizer(target: self, action: #selector(self.getSwipeAction(_:)))
self.ImageView.addGestureRecognizer(swipeGesture) 

func getSwipeAction( _ recognizer : UISwipeGestureRecognizer){

    if recognizer.direction == .right{
       print("Right Swiped") 
    } else if recognizer.direction == .left {
        print("Left Swiped")
    }
}
7
jeff ayan

Différent des autres UIViews, UIImageView, par défaut, comporte une interaction utilisateur disabled. Incluez cette ligne dans votre code et le geste devrait fonctionner comme prévu:

imageView.userInteractionEnabled = YES;
3
Lucas Eduardo

À l’aide de Swift 4, les images sélectionnées dans votre photothèque peuvent être balayées sur l’affichage des images par geste.

   @IBOutlet weak var Imageview: UIImageView!

   var images=[UIImage]()
   var i=Int()
   override func viewDidLoad() {
     super.viewDidLoad()

     let swipeLeftGesture=UISwipeGestureRecognizer(target: self, action: #selector(SwipeLeftImage))
     Imageview.isUserInteractionEnabled=true
     swipeLeftGesture.direction = UISwipeGestureRecognizerDirection.left
     Imageview.addGestureRecognizer(swipeLeftGesture)

     let swipeRightGesture=UISwipeGestureRecognizer(target: self, action: #selector(SwipeRightImage))
     swipeRightGesture.direction = UISwipeGestureRecognizerDirection.right
     Imageview.addGestureRecognizer(swipeRightGesture)
    }
    @objc func SwipeLeftImage(){
      if i<images.count-1{
        i+=1
        Imageview.image=images[i]
      }
    }
    @objc func SwipeRightImage(){
      if i<=images.count-1{
        i-=1
        Imageview.image=images[i]
      }
    }
//MARK:- imagePickerController Delegate Function
   func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
      self.dismiss(animated: true, completion: nil)
      if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
        Imageview.contentMode = .scaleToFill
        Imageview.image=nil
        images.insert(pickedImage, at: images.endIndex)
        Imageview.image = pickedImage
       }
    }
2
Kawalpreet Kaur

J'avais des problèmes avec ceci car je pouvais faire fonctionner UISwipeGestureRecognizer si je l'ajoutais à self.view, mais pas à chaque UIImageView. Merci Jeff Ayan pour l'exemple de code Swift 3. Si vous utilisez le générateur d'interface, vous pouvez également cocher la case UImageView de l'interaction utilisateur activée dans l'inspecteur d'attributs. 

0
Wyatt