2015-02-07 99 views
2

我的問題是當我向下滾動我的UITableView時,它看起來太滯後了。圖片從Facebook抓取。Swift - UITableView滯後於圖像

我的代碼

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

     let cell = tableView.dequeueReusableCellWithIdentifier("UserCell", forIndexPath: indexPath) as UITableViewCell 

     let user = users[indexPath.row] as User //2 

     if let nameLabel = cell.viewWithTag(100) as? UILabel { //3 
      nameLabel.text = user.name 
     } 

     if let dateCreatedLabel = cell.viewWithTag(101) as? UILabel { 
     dateCreatedLabel.text = user.distance 
     } 

     if let profilePictureView = cell.viewWithTag(103) as? UIImageView { 
      if let url = NSURL(string: "https://graph.facebook.com/\(user.profilePhoto)/picture?type=large") { 
       if let data = NSData(contentsOfURL: url){ 
        profilePictureView.contentMode = UIViewContentMode.ScaleAspectFit 
        profilePictureView.image = UIImage(data: data) 
       } 
      } 
     } 
     return cell 
    } 

請指點如何使其光滑。

+0

查找有關在後臺加載圖像的問題和解答。 – 2015-02-07 09:44:03

+0

http://stackoverflow.com/questions/24231680/swift-loading-image-from-url – 2015-02-07 09:56:15

回答

3

我已經找到了答案。使用Haneke代替NSData

import Haneke 

/* .. */ 

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

     let cell = tableView.dequeueReusableCellWithIdentifier("UserCell", forIndexPath: indexPath) as UITableViewCell 

     let user = users[indexPath.row] as User //2 

     if let nameLabel = cell.viewWithTag(100) as? UILabel { //3 
      nameLabel.text = user.name 
     } 

     if let dateCreatedLabel = cell.viewWithTag(101) as? UILabel { 
     dateCreatedLabel.text = user.distance 
     } 

     if let profilePictureView = cell.viewWithTag(103) as? UIImageView { 
      if let url = NSURL(string: "https://graph.facebook.com/\(user.profilePhoto)/picture?type=large") { 
        profilePictureView.contentMode = UIViewContentMode.ScaleAspectFit 
        profilePictureView.hnk_setImageFromURL(url!) 

      } 
     } 
     return cell 
    } 
4

OMG,從來不是隻在滾動控制很喜歡這一點,但一般UI也:

數據= NSData的(contentsOfURL:URL)

這就是爲什麼你表滯後,和你幸運與快速互聯網。如果你的連接速度很慢,你的應用程序將掛起,可能會永遠。總是做異步的網絡!

此外,當你讓你的網絡異步,您的tableView將仍然落後位置:

的UIImage(數據:數據)

而且即使在這裏,如果你在你的許多控制:

cell.viewWithTag(101)

因此,使用一些庫來下載圖像,這似乎並非如此簡單,根據您的經驗(我可以看到它),您不會自己做對。

爲您的單元格製作單獨的課程並使用IB連接網點。

嘗試AFNetworking,它具有用於UIImageView下載圖像的類別。

+0

那麼我該如何解決這個問題? – 2015-02-07 09:52:16

+0

@ Dato'MohammadNurdin看到我更新的答案,你用swift編寫代碼,現在沒有那麼多的庫我認爲(我用objective-c編碼,有幾個,嘗試採用AFNetworking fe) – faviomob 2015-02-07 09:56:37

+0

是否有可能如果我使用這個庫? https://github.com/Alamofire/Alamofire – 2015-02-07 10:12:22