Balayez d'avant en arrière à travers un tableau d'images Swift

J'ai un tableau d'images que je veux pouvoir balayer en avant (à gauche) vers l'image suivante, ou en arrière (à droite) vers l'image précédente. Lorsque l'imageList atteint -1 / hors de scope, l'application se bloque. J'ai du mal à comprendre la logique de la façon de le garder à scope.

Voici mon code:

var imageList:[Ssortingng] = ["image1.jpg", "image2.jpg", "image3.jpg"] let maxImages = 2 var imageIndex: NSInteger = 1 

Les gestes de balayage sont dans ma méthode viewDidLoad (), je ne sais pas si c'est le bon endroit …:

  override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. var swipeRight = UISwipeGestureRecognizer(target: self, action: "swiped:") // put : at the end of method name swipeRight.direction = UISwipeGestureRecognizerDirection.Right self.view.addGestureRecognizer(swipeRight) var swipeLeft = UISwipeGestureRecognizer(target: self, action: "swiped:") // put : at the end of method name swipeLeft.direction = UISwipeGestureRecognizerDirection.Left self.view.addGestureRecognizer(swipeLeft) image.image = UIImage(named:"image1.jpg") } func swiped(gesture: UIGestureRecognizer) { if let swipeGesture = gesture as? UISwipeGestureRecognizer { switch swipeGesture.direction { case UISwipeGestureRecognizerDirection.Right : println("User swiped right") /*No clue how to make it go back to the previous image and when it hits the last image in the array, it goes back to the first image.. */ case UISwipeGestureRecognizerDirection.Left: println("User swiped Left") if imageIndex > maxImages { imageIndex = 0 } image.image = UIImage(named: imageList[imageIndex]) imageIndex++ default: break //stops the code/codes nothing. } } } 

Merci beaucoup d'avance!

Tout d'abord, votre index d'image doit être mis à zéro puisque les éléments du tableau commencent à partir de zéro, mais ce n'est pas une source de votre problème

 var imageIndex: NSInteger = 0 

alors votre fonction glissée devrait être comme suit

 func swiped(gesture: UIGestureRecognizer) { if let swipeGesture = gesture as? UISwipeGestureRecognizer { switch swipeGesture.direction { case UISwipeGestureRecognizerDirection.Right : println("User swiped right") // decrease index first imageIndex-- // check if index is in range if imageIndex < 0 { imageIndex = maxImages } image.image = UIImage(named: imageList[imageIndex]) case UISwipeGestureRecognizerDirection.Left: println("User swiped Left") // increase index first imageIndex++ // check if index is in range if imageIndex > maxImages { imageIndex = 0 } image.image = UIImage(named: imageList[imageIndex]) default: break //stops the code/codes nothing. } } } 

Vous pouvez faire quelque chose comme ça.

Vous devez d'abord définir un countur de position qui indique où vous en êtes actuellement. Important: Vous devez définir le début sur 0 si vous voulez démarrer à partir du premier élément, car les arrays commencent à countr à partir de 0:

 var swipePosition = 0 

Ensuite, si vous faites glisser votre doigt vers l'avant, vous devez vérifier si swipePosition actuel est plus grand que la quantité d'images. Pour ce faire, vous pouvez utiliser la méthode count de votre tableau. Mais vous devez soustraire 1 parce que la position commence à 0. Donc, si elle est déjà à la position la plus haute ou la plus basse de votre tableau, vous n'avez rien à faire. Sinon, vous ajoutez ou soustrayez une position:

 //swipe forward if swipePosition > imageList.count-1{ //do nothing because it is already at the highest position }else{ swipePosition += 1 } image.image = UIImage(named: imageList[swipePosition]) //swipe backward if swipePosition == 0 { //Do nothing because it is already at start. }else{ swipePosition -= 1 } image.image = UIImage(named: imageList[swipePosition]) 

`

 @IBOutlet weak var img: UIImageView! var currentnImageIndex:NSInteger = 0 let arrayOfImages = ["Home Filled-50","Bullish-50","Line Chart Filled-50","Stack of Photos Filled-50","News-50","Download From Ftp Filled-50","Administrator Male Filled-50","Trophy Filled-50","Page Overview Filled-50"] override func viewDidLoad() { super.viewDidLoad() img.userInteractionEnabled = true//do not forget to right this line otherwise ...imageView's image will not move let swipeRight = UISwipeGestureRecognizer(target: self, action: "swipedRight:") swipeRight.direction = UISwipeGestureRecognizerDirection.Right img.addGestureRecognizer(swipeRight) let swipeLeft = UISwipeGestureRecognizer(target: self, action: "swipedRight:") swipeLeft.direction = UISwipeGestureRecognizerDirection.Left img.addGestureRecognizer(swipeLeft) img.image = UIImage(named: arrayOfImages[currentnImageIndex]) // Do any additional setup after loading the view. } func swipedRight(gesture : UIGestureRecognizer){ if let swipeGesture = gesture as? UISwipeGestureRecognizer{ switch swipeGesture.direction{ case UISwipeGestureRecognizerDirection.Right: print("User swiped right") if currentnImageIndex < arrayOfImages.count - 1 { ++currentnImageIndex } if currentnImageIndex < arrayOfImages.count { img.image = UIImage(named: arrayOfImages[currentnImageIndex]) } case UISwipeGestureRecognizerDirection.Left: print("User swiped left") // --currentnImageIndex if currentnImageIndex > 0{ --currentnImageIndex } if currentnImageIndex >= 0{ img.image = UIImage(named: arrayOfImages[currentnImageIndex]) } // if curretnImageIndex default: break } ` 
 @IBOutlet weak var imageView: UIImageView! var imageIndex:NSInteger = 0 var maximages = 3 var imageList: [Ssortingng] = ["burger", "burger2", "burger3", "burger4"] override func viewDidLoad() { super.viewDidLoad() let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(swiped)) // put : at the end of method name swipeRight.direction = UISwipeGestureRecognizerDirection.right self.view.addGestureRecognizer(swipeRight) let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(swiped)) // put : at the end of method name swipeLeft.direction = UISwipeGestureRecognizerDirection.left self.view.addGestureRecognizer(swipeLeft) imageView.image = UIImage(named:"burger") } func swiped(gesture: UIGestureRecognizer) { if let swipeGesture = gesture as? UISwipeGestureRecognizer { switch swipeGesture.direction { case UISwipeGestureRecognizerDirection.right : print("User swiped right") // decrease index first imageIndex -= 1 // check if index is in range if imageIndex < 0 { imageIndex = maximages } imageView.image = UIImage(named: imageList[imageIndex]) case UISwipeGestureRecognizerDirection.left: print("User swiped Left") // increase index first imageIndex += 1 // check if index is in range if imageIndex > maximages { imageIndex = 0 } imageView.image = UIImage(named: imageList[imageIndex]) default: break //stops the code/codes nothing. } } } }