Desliza hacia adelante y hacia atrás a través de un set de imágenes Swift

Tengo un set de imágenes que quiero poder deslizar hacia delante (izquierda) a la siguiente image, o hacia atrás (derecha) a la image anterior. Cuando imageList marca -1 / fuera de range, la aplicación se bloquea. Tengo problemas para descubrir la lógica de cómo mantenerlo dentro del scope.

Aquí está mi código:

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

Los gestos de deslizar están en mi método viewDidLoad (), no estoy seguro de si este es el lugar correcto …:

  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. } } } 

¡Muchas gracias por adelantado!

En primer lugar, su índice de image debe establecerse en cero, ya que los elementos de matriz comienzan desde cero, pero eso no es una fuente de su problema

 var imageIndex: NSInteger = 0 

entonces tu function deslizada debería ser similar a la siguiente

 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. } } } 

Puedes hacer algo así.

Primero debe establecer un contador de position que indique dónde se encuentra en este momento. Importante: debe establecer el inicio en 0 si desea comenzar desde el primer elemento, ya que las matrices comienzan a contar desde 0:

 var swipePosition = 0 

Luego, si desliza hacia adelante, debe verificar si la position actual del golpe es mayor que la cantidad de imágenes. Para hacer eso, puede usar el método de count de su matriz. Pero debes restar 1 porque la position comienza en 0. Entonces, si ya está en la position más alta o más baja de tu matriz, no tienes que hacer nada. De lo contrario, agrega o resta una 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: [String] = ["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. } } } }