2016-05-28 45 views
2

Ich habe eine UICollectionView in einem View-Controller. Wenn der Benutzer auf eines der Bilder klickt, wird das Bild auf einer separaten Seite geöffnet. Ich möchte nicht jedes Mal in die Galerie zurückkehren, um Bilder zu wechseln, nach links oder rechts wischen, um das nächste oder vorherige Bild zu erhalten.UICollectionView Scrollen/Swipe zum nächsten Element swift

Ich habe Antworten gesehen, um "pagingEnabled = true" zu tun, aber wo genau setzen Sie das?

Ich bin neu zu schnell.

Unten ist mein Code. Danke für die Hilfe im Voraus.

ViewController.swift

import UIKit 

class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate 
{ 
@IBOutlet weak var collectionView: UICollectionView! 

let appleProducts = ["iPhone", "Apple Watch", "Mac", "iPad"] 
let imageArray = [UIImage(named: "pug"), UIImage(named: "pug2"), UIImage(named: "pug3"), UIImage(named: "pug4")] 

override func viewDidLoad() 
{ 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
} 

override func didReceiveMemoryWarning() 
{ 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
{ 
    return self.appleProducts.count 
} 

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 
{ 

    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! CollectionViewCell 

    cell.imageView?.image = self.imageArray[indexPath.row] 

    cell.titleLabel?.text = self.appleProducts[indexPath.row] 

    return cell 

} 

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) 
{ 
    self.performSegueWithIdentifier("showImage", sender: self) 
} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
{ 
    if segue.identifier == "showImage" 
    { 
     let indexPaths = self.collectionView!.indexPathsForSelectedItems()! 
     let indexPath = indexPaths[0] as NSIndexPath 
     let vc = segue.destinationViewController as! NewViewController 
     vc.image = self.imageArray[indexPath.row]! 
     vc.title = self.appleProducts[indexPath.row] 
    } 
} 

} 

CollectionViewCell.swift

import UIKit 

class CollectionViewCell: UICollectionViewCell 
{ 
@IBOutlet weak var imageView: UIImageView! 
@IBOutlet weak var titleLabel: UILabel! 
} 

NewViewController.swift

import UIKit 

class NewViewController: UIViewController 
{ 
@IBOutlet weak var imageView: UIImageView! 
var image = UIImage() 

override func viewDidLoad() 
{ 
    super.viewDidLoad() 

    self.imageView.image = self.image 
} 

override func didReceiveMemoryWarning() 
{ 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 


/* 
// MARK: - Navigation 

// In a storyboard-based application, you will often want to do a little preparation before navigation 
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    // Get the new view controller using segue.destinationViewController. 
    // Pass the selected object to the new view controller. 
} 
*/ 

} 

Antwort

0

Im View-Controller, die nach einem Hahn präsentiert wird, sollten Sie eine horizontal machen Scrollen UICollectionView. Setzen Sie in dieser Sammlungsansicht die Eigenschaft pagingEnabled auf true.

Als nächstes müssen Sie Ihre prepareForSegue Methode in Ihrem übergeordneten Ansichts-Controller neu formatieren, um das gesamte Array von Bildern an den präsentierten View-Controller sowie den ausgewählten Indexpfad zu übergeben.

Dann sollten Sie die Datenquelle in der Sammlungsansicht so konfigurieren, dass alle Bilder angezeigt werden. Achten Sie jedoch darauf, dass Sie beim ersten ausgewählten Indexpfad beginnen, der vom übergeordneten Ansichtscontroller übergeben wurde.