2015-02-24 2 views
5

Ich habe eine Reihe von Bildern, die ich in der Lage sein soll, vorwärts (links) zum nächsten Bild oder zurück (rechts) zum vorherigen Bild zu wischen. Wenn die Bildliste -1/außerhalb des Bereichs erreicht, stürzt die App ab. Ich habe Schwierigkeiten, die Logik herauszufinden, wie man sie in Reichweite hält.Swipe vor und zurück durch das Array von Bildern Swift

Hier ist mein Code:

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

Die Swipe-Gesten in meinem viewDidLoad() -Methode sind, nicht sicher, ob dies der richtige Ort ist ...:

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. 


     } 

    } 


} 

Vielen Dank im voraus!

Antwort

11

allererst Ihre Bildindex sollte, aber das ist von Null beginnt zu Null, da Array-Elemente gesetzt werden, die keine Ursache des Problems

var imageIndex: NSInteger = 0 

dann Swiped Funktion wie folgt

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

Hallo, dies funktioniert, aber wie kann ich ziehen Animation hinzufügen. – myatmins

2
sein sollte

Sie können so etwas machen.

Zuerst müssen Sie einen Positionszähler setzen, der sagt, wo Sie gerade sind. Wichtig: Sie müssen den Start in 0 setzen, wenn Sie von dem ersten Element gestartet werden soll, weil Arrays Zählen von 0 beginnen:

var swipePosition = 0 

Dann, wenn Sie nach vorne streichen, müssen Sie überprüfen, ob die aktuelle swipePosition ist größer als die Anzahl der Bilder. Um dies zu tun, können Sie die count Methode Ihres Arrays verwenden. Aber Sie müssen 1 subtrahieren, weil die Position bei 0 beginnt. Wenn Sie also bereits an der höchsten oder niedrigsten Position in Ihrem Array ist, müssen Sie nichts tun. Andernfalls Sie eine Position addieren oder subtrahieren:

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

Sie sollten erklären, was Ihr Code tut, um Ihre Antwort zu verbessern. Bitte lies diese http://stackoverflow.com/help/how-to-answer – David

+0

ich bin neu zu stack community ... danke für den Vorschlag .. ich werde lesen, wie man antwortet – 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

Kannst du mir sagen, wie kann ich Seite Kontrolle hinzufügen mit diesem. –