Swift – UITableView отстает от изображений

Моя проблема в том, что я прокручиваю свой UITableView, он выглядит слишком лагги. Изображения захватывают из facebook.

Мой код

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 } 

Пожалуйста, совет, как сделать его гладким.

OMG, никогда не делайте этого не только в элементах управления прокруткой, но и в общем пользовательском интерфейсе:

data = NSData (contentsOfURL: url)

Вот почему вы стол отстаете, и вам повезло с быстрым доступом в Интернет. Если соединение будет медленным, приложение будет зависать, возможно, навсегда. ВСЕГДА выполняйте сетевую асинхронность!

Кроме того, когда вы делаете асинхронную сеть, ваш tableView все равно будет отставать:

UIImage (данные: данные)

И даже здесь, если у вас много элементов управления в вашей камере:

cell.viewWithTag (101)

Итак, используйте некоторую библиотеку для загрузки изображений, это удивительно непростая задача, как кажется, вы не будете делать это правильно сами по себе (как я вижу это).

Сделайте отдельный класс для вашей ячейки и используйте IB для подключения розетки.

Попробуйте AFNetworking, у него есть категория для UIImageView для загрузки изображений.

Я уже нашел ответ. Используйте 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 } 
  • Запустить изображение добавляет маржу
  • Кокопод: Библиотека не найдена
  • Ошибка Xcode 6? Добавление iPhone 6/6 Plus LaunchImage меняет ограничения приложений
  • Плагин ColorSense-For-XCode не работает в быстром коде
  • Запуск приложения из UIWebView в пользовательской клавиатуре
  • Моя кнопка Sprite Kit не будет работать в Swift
  • Программно изменить название UIButton, не работающего в iOS Xcode-Beta 3
  • Боты Xcode не могут установить IPA (с сегодняшним виджетами)
  • Как создать структуру разработки в iOS, включая Swift?
  • Круглый слайдер для Apple Watch?
  • Переменные среды проекта Xcode
  • Давайте будем гением компьютера.