2016-08-26 3 views
6

Ich habe uicollectionview Codes mit CustomCollectionViewLayout, und innerhalb haben a lot of small cells, aber Benutzer kann sie ohne nicht sehen. Auch alle Zellen wählbar.Zoomen in UICollectionView

Ich möchte meine Sammlung Ansicht in Zoom-Funktion hinzufügen!

Meine eindeutigen Codes unten.

class CustomCollectionViewController: UICollectionViewController { 

    var items = [Item]() 


    override func viewDidLoad() { 
     super.viewDidLoad() 


     customCollectionViewLayout.delegate = self 

     getDataFromServer() 

} 

func getDataFromServer() { 

     HttpManager.getRequest(url, parameter: .None) { [weak self] (responseData, errorMessage) ->() in 

      guard let strongSelf = self else { return } 

      guard let responseData = responseData else { 
       print("Get request error \(errorMessage)") 
       return 
      } 

      guard let customCollectionViewLayout = strongSelf.collectionView?.collectionViewLayout as? CustomCollectionViewLayout else { return } 

      strongSelf.items = responseData 
      customCollectionViewLayout.dataSourceDidUpdate = true 

      NSOperationQueue.mainQueue().addOperationWithBlock({() -> Void in 
       strongSelf.collectionView!.reloadData() 
      }) 
     } 
    } 
} 

extension CustomCollectionViewController { 

    override func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int { 
     return items.count 
    } 

    override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
     return items[section].services.count + 1 
    } 

    override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
     let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! CustomCollectionViewCell 


      cell.label.text = items[indexPath.section].base 


     return cell 

} 

    override func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath cellForItemAtIndexPath: NSIndexPath) { 

    print(items[cellForItemAtIndexPath.section].base) 


} 

} 

auch unter meine UICollectionView Layouteigenschaften unterhalb Sie es sehen können ausgewählt i maxZoom 4 aber doesnt haben keine Aktion!

enter image description here

Vielen Dank!

+0

Diese Frage kann hilfreich sein: [make collectionview zoomable] (http://stackoverflow.com/questions/13485617/make-uicollectionview-zoomable) – jojoT

+0

@jojoT ty aber dieses Beispiel obj-c und tun Pinch Zoom jedes Element i will schnell und Fläche Zoom nicht jedes Element einfach zoom – SwiftDeveloper

+0

ist der Benutzer berührt die Sammlung anzeigen, dann die Zelle bekommen Zoom? Meinst du, nach der Berührung wird die Ansicht der ganzen Sammlung verschwommen und die berührte Zelle erscheint nur in der Mitte des Bildschirms in sichtbarer Breite und Höhe? –

Antwort

1

Sie zoomen keine Sammlung, als würden Sie eine einfache Bildlaufansicht zoomen. Stattdessen sollten Sie eine Pinch-Geste (oder einen anderen Zoom-Mechanismus) hinzufügen und damit das Layout ändern, damit Ihr Raster eine unterschiedliche Anzahl von Elementen im sichtbaren Teil der Sammlung anzeigt. Dies ändert grundsätzlich die Anzahl der Spalten und damit die Artikelgröße (Zellengröße). Wenn Sie das Layout aktualisieren, kann die Sammlung zwischen den verschiedenen Größen animiert werden. Obwohl es sehr unwahrscheinlich ist, dass Sie einen glatten Zoom wünschen, möchten Sie, dass sie direkt von N Spalten zu N-1 Spalten in einem Schritt geht.

+0

danke, aber ich weiß, dass das ist. Ich möchte meine UICollectionView in ein einfaches ZOOM integrieren, wenn ein Klick darin hineinzoomt. Und ich brauche, dass Codes keine Ideen brauchen :) – SwiftDeveloper

1

Ich denke, was Sie sieht aus wie du fragen, was in der WWDC1012 Video gemacht ist berechtigt Erweiterte Sammlung Ansichten und Erstellen benutzerdefinierter Layouts (Demo beginnt um 20:20) https://www.youtube.com/watch?v=8vB2TMS2uhE

Sie haben grundsätzlich pinchGesture Sie hinzufügen UICollectionView und übergibt die Pinch-Eigenschaften (scale, center) an die UICollectionViewLayout (eine Unterklasse von UICollectionViewFlowLayout). Ihr Layout führt dann die Transformationen durch, die zum Zoomen der gewünschten Zelle erforderlich sind.

+0

Ich sah vorher, aber nicht meine Frage zu beheben – SwiftDeveloper