2015-02-24 12 views
5

Mam wiele obrazów, które chcę przesuwać w przód (w lewo) do następnego obrazu lub wracać (w prawo) do poprzedniego obrazu. Kiedy imageList osiąga -1/poza zasięgiem, aplikacja ulega awarii. Mam problem z ustaleniem logiki, jak utrzymać ją w zasięgu.Przesuwaj w tył i w przód poprzez tablicę obrazów Swift

Oto mój kod:

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

bezstykowa gesty są w sposobie mojego viewDidLoad(), nie wiem, czy to jest właściwe miejsce ...:

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. 


     } 

    } 


} 

Thanks a LOT postęp!

Odpowiedz

11

Przede wszystkim indeksu obraz powinien być ustawiony na zero, ponieważ elementów tablicy zaczyna się od zera, ale nie to jest to źródło problemu

var imageIndex: NSInteger = 0 

wówczas przeciągnął funkcja powinna być jak następujące

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. 


    } 

} 


} 
+3

Witam, to działa, ale w jaki sposób mogę dodać przeciąganie animacji. – myatmins

2

Możesz zrobić coś takiego.

Najpierw musisz ustawić licznik pozycji, który mówi, gdzie jesteś w tej chwili. Ważne: Musisz ustawić początek 0 jeśli chcesz zacząć od pierwszego elementu, ponieważ tablice rozpocząć liczenie od 0:

var swipePosition = 0 

Następnie, jeśli przesuń do przodu, trzeba sprawdzić, czy prąd swipePosition jest większa niż ilość obrazów. Aby to zrobić, możesz użyć metody count swojej tablicy. Ale musisz odjąć 1, ponieważ pozycja zaczyna się od 0. Więc jeśli jest już na najwyższej lub najniższej pozycji w twojej tablicy, nie musisz nic robić. W przeciwnym razie dodać lub odjąć jedną pozycję:

//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]) 
1

`

@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 
     } 
    ` 
+0

Powinieneś wyjaśnić, co robi twój kod, aby poprawić twoją odpowiedź. Proszę przeczytaj ten http://stackoverflow.com/help/how-to-answer – David

+0

im nowy do stosu społeczności ... dzięki za sugestię .. przeczytam, jak odpowiedzieć – Dhrumil

0
@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. 
       } 
      } 
     } 
} 
+0

Czy możesz mi powiedzieć, jak mogę dodać kontrolę strony z tym. –

Powiązane problemy