2016-07-13 11 views
-1

Ich habe tableViews, die jeden Zeilenordner (Album Image) enthält, die ich Bilder in das Dokument-Verzeichnis speichern, wenn ich die einzelnen Ordner ich in der benutzerdefinierten collectionView eingeben auswählen die über alle Bilder im Dokument-Verzeichnis und zeigt es auf die Zellen mein Problem ist Collection sehr langsam ladende die Bilder in der collectionViewCells es 5 bis 7 Sekunden in Anspruch nehmen, wenn alle Bilder im Laden collectionViewCellsIch habe ein Problem beim Laden von Bildern auf meiner benutzerdefinierten SammlungView

folgendes unter meinem Code in viewWillAppear:

override func viewWillAppear(animated: Bool) { 

      setEditing(false, animated: true) 
      arrayOfImagesFromDocumentDirectory = [] 
      dictionaryOfGetImageUrl = [:] 
      dictionaryOfImagesForExport = [:] 
      arrayImageForMove = [] 
      moveArrayImageOfUrl = [] 
      arrayOfImageUrl2 = [] 


      self.navigationItem.title = albumName 

     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { 
       dispatch_async(dispatch_get_main_queue(), { 

       let fileManager2 = NSFileManager.defaultManager() 
       do { 
        let document = try fileManager2.URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: false) 
        let getFolders = try fileManager2.contentsOfDirectoryAtURL(document, includingPropertiesForKeys: nil, options: .SkipsHiddenFiles) 

        for folder in getFolders { 
         if folder.lastPathComponent! == albumName { 
          let getImages = try fileManager2.contentsOfDirectoryAtURL(folder, includingPropertiesForKeys: nil, options: .SkipsHiddenFiles) 

          for img in getImages { 
          self.arrayOfImagesFromDocumentDirectory.append(UIImage(contentsOfFile: img.path!)!) 
          self.arrayOfImageUrl2.append(img.path!) 

          } 
         } 
        } 

       }catch { 
        print(error) 
       } 

    self.arrayOfImg = [] 

       for img in self.arrayOfImagesFromDocumentDirectory { 
        let img2:UIImage = self.ResizeImage(img, targetSize: CGSize(width: 140, height: 140)) 
        self.arrayOfImg.append(img2) 
       } 

       self.myCollectionView.reloadData() 


       }) 


     } 
     myCollectionView.reloadData() 
    } 

folgenden Below MyCode auf den cellForItemAtIndexPath:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
     let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! AlbumImagesCollectionViewCell 

     if self.dictionaryOfSelectItem.count > 0 { 
      if self.dictionaryOfSelectItem[indexPath.row] == indexPath.row { 

       cell.imageViewCheck.image = UIImage(named: "check.png") 
      }else { 
       cell.imageViewCheck.image = nil 
      } 

     }else { 
      cell.imageViewCheck.image = nil 
     } 


      if self.arrayOfImageUrl2.count > 0 && self.arrayOfImagesFromDocumentDirectory.count > 0 { 
       if self.arrayOfImg.count > 0 { 
        cell.imageViewCell.image = self.arrayOfImg[indexPath.row] 
        cell.imageUrlLabel.text = self.arrayOfImageUrl2[indexPath.row] 

       } 
      } 

     return cell 

    } 

eine Idee für mein großes Problem

Dank Vorschuss

+0

Was ist Ihr Problem genau? –

+0

Das Laden von Bildern aus der Dokument-Direktive in meine SammlungView ist sehr langsam und braucht viel Speicher, wie kann ich Bilder schnell in meine Sammlung holenView –

+0

Haben Sie debugged, um zu sehen, wo es sich langsam verhält? –

Antwort

0

ich gesehen habe nur zu lösen, dass Sie einen Hintergrund-Thread laufen gehen, aber inmediatelly zurück der Hauptfaden. Sie müssen die Daten (Bilder in diesem Fall) in den Hintergrund-Thread

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {

auch laden, wenn Sie die Bilder in der viewDidLoad statt in der viewWillAppear laden, dann müssen Sie nicht über die Sammlung neu zu laden Ansicht, weil es danach geladen wird und die Datenquelle (in Ihrem Fall self.arrayOfImg) verwendet, um zu füllen.

Ich empfehle Ihnen auch, die Bilder im Code nicht zu ändern, aber Einschränkungen verwenden, um das zu tun. Bitte sehen Sie sich Working with Constraints in Interface Builder von Apple Guide.

Ist es möglich, dass Ihre Bilder zu groß sind?

+0

Wenn ich den Code in ViewDidLoad dann habe ich Problem, weil, wenn ich irgendein Bild nach dem Anzeigebild lösche die Sammlungsansicht es auf den neuen Bildern nicht aktualisiere und ich die Bilder verändere, weil mein Bild zu groß ist, habe ich es von der Fotobibliothek holen das fotos framework –

+0

ich auch dispatch_async (dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) Ich habe 5 bis 7 Sekunden warten, um die Bilder zu collectionView –

+0

laden Sie verwenden es falsch, weil Sie sofort zurück zum Haupt-Thread gehen. –