0

Ich baute eine App, die alle Fotos von Instagram-Benutzer über Instagram API abrufen und in CollectionView geordnet anzeigen.Aufruf des nächsten Bildes in Sammlungsansicht von anderen Klasse

Jetzt, wenn der Benutzer auf ein Foto tippen wird das Foto in einem UIView geöffnet, um dieses Bild zu zeigen - im Grunde kann der Benutzer kneifen, um zu zoomen und andere Optionen, die nicht in der Instagram-App sein können.

Was ich versuche, ist - wischen Sie das Bild, um zum nächsten Bild zu gelangen. Ich dachte über die Verwendung von ScrollView, die keine große Sache ist.

DAS PROBLEM IST, dass ich nicht weiß, wie das nächste Foto in der Sammlungsansicht aufgerufen wird.

Antwort

0

Sie können Delegation so etwas verwenden, haben Sie Ihre Ansicht mit dem Bild Aufruf nextPhoto(), wenn eine Sammelansicht liefern müssen.

 struct Photo { 
      var image:UIImage? 
     } 

     class CustomCollectionView: UICollectionViewController{ 
      var dataSource:[Photo]! = [] 
      var selectedIndex:NSIndexPath! 

      override func viewDidLoad() { 
       super.viewDidLoad() 
      } 
     } 

     extension CustomCollectionView: UpdatePhoto { 

      func nextPhoto() -> Photo?{ 
       let nextIndex = selectedIndex.row + 1 
       // update selected index 

       selectedIndex = NSIndexPath(forRow: nextIndex, inSection: 0) 
       return dataSource[selectedIndex.row]; 
      } 

      func previousPhoto() -> Photo? { 
       let previousIndex = selectedIndex.row - 1 
       // update selected index 
       selectedIndex = NSIndexPath(forRow: previousIndex , inSection: 0) 
       return dataSource[selectedIndex.row]; 
      } 
     } 

     protocol UpdatePhoto { 
      func nextPhoto() -> Photo? 
      func previousPhoto() -> Photo? 
     } 
    class PhotoDisplayingView:UIView{ 
     var photo:Photo 
     var delegate:UpdatePhoto? 

     required init(photo:Photo){ 
      self.photo = photo 
      super.init(frame: CGRect(origin: CGPointZero, size: photo.image!.size)) 
     } 

     required init?(coder aDecoder: NSCoder) { 
       fatalError("init(coder:) has not been implemented") 
      } 
     } 
    } 

Sie werden etwas tun, wenn die Geste var nextImage = delegate.nextPhoto()

+0

Denk nicht, dass du mich verstanden hast. Alles, was ich brauche, ist den Indexpfad der Fotos im Array zu nehmen und sie in anderen Klassen zu verwenden. – user3181843

+0

Ich habe es aktualisiert, Sie können entweder mit dem neuen Update gehen oder einfach die Datenquelle einen ausgewählten Index an das Foto mit dem Bild übergeben – Cjay

+0

Nun, ich versuche zu verstehen, wie die NextPhoto-Funktion aufgerufen wird, um es als Unteransicht der ScrollView hinzufügen So wird es angezeigt, wenn das System UISwipeGestureRecognizer erkennt. Für irgendwie kann ich nicht herausfinden, wie man es als eine UIView oder UIImageView – user3181843

0

speichern Sie den ausgewählten Indexpfad. Nächstes Foto wird der nächste Indexpfad sein.

Beispiel: self.selectedIndexPath = indexPath - speichern

Dann nächsten Indexpfad oder Null (wenn nicht vorhanden):

func nextIndexPath() -> NSIndexPath? { 
    if collectionView.numberOfItemsInSection(selectedIndexPath.section) > selectedIndexPath.item { 
     return NSIndexPath(forItem: selectedIndexPath.item + 1, inSection: selectedIndexPath.section) 
    } 
    return nil 
} 

Dann könnten Sie es verwenden, zum nächsten Bild, um so etwas zu bekommen:

if let indexPath = nextIndexPath() { 
    let photo = photos[indexPath.item] 
} 

PS item ist das gleiche wie row, aber für CollectionView, weil row falschen Namen dafür. So ist es vorzuziehen, item in Sammlungsansichten zu verwenden

+0

Handhabung kann nicht Mitglied numberOfItemsInSection auf meine Kollektion Klasse finden, wenn man versucht, es zu nennen. Vielleicht müssen Sie die Klasse registrieren? – user3181843