通过Swift图像来回来回滑动

我有一系列图像,我希望能够向前(向左)滑动到下一个图像,或向后(向右)滑动到上一个图像。 当imageList达到-1 /超出范围时,应用程序崩溃。 我无法弄清楚如何将其保持在范围内的逻辑。

这是我的代码:

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

滑动手势在我的viewDidLoad()方法中,不确定这是否是正确的位置……:

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

非常感谢提前!

首先,您的图像索引应设置为零,因为数组元素从零开始,但这不是您的问题的根源

 var imageIndex: NSInteger = 0 

然后你的刷卡function应该如下

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

你可以做出类似的东西。

首先,你需要设置一个位置计数器,表示你现在所处的位置。 重要提示:如果要从第一个元素开始,则需要将start设置为0 ,因为数组从0开始计数:

 var swipePosition = 0 

然后,如果向前滑动,则需要检查当前的swipePosition是否大于图像数量。 为此,您可以使用数组的count方法。 但是你必须减去1因为位置从0开始。所以如果它已经在数组中的最高或最低位置,你就不必做任何事情。 否则你添加或减去一个位置:

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