私は、tableViewを使用して(Instagramと同様に)サーバーから送信されたイメージを表示するアプリケーションを持っています。バックグラウンドスレッドでUITableViewイメージを読み込みます。
私が得たサーバーから:
- のフルサイズ画像URL
- 説明(文字列)
- 画像の幅
- 画像の高さ
をし、私はそのカスタムセルを持っています私が望むようにそれを提示する。
Instagramと同様に、画像の高さは固定されていないため、セルの高さは画像の高さに動的に変化します。
私は、サーバーから取得した画像は本当に大きいですので、私はそのように、すべての画像がWidth - Screen's width, Height - Based of the width (keeps the ratio)
するクロップ:
func imageWithImage (sourceImage:UIImage, scaledToWidth: CGFloat) -> UIImage {
let oldWidth = sourceImage.size.width
let scaleFactor = scaledToWidth/oldWidth
let newHeight = sourceImage.size.height * scaleFactor
let newWidth = oldWidth * scaleFactor
UIGraphicsBeginImageContext(CGSize(width:newWidth, height:newHeight))
sourceImage.draw(in: CGRect(x:0, y:0, width:newWidth, height:newHeight))
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage!
}
私の問題は、のtableViewが非常に遅いということです。だから私は背景のスレッドで画像を読み込んでトリミングし、その読み込み中にデフォルト画像を表示することを考えました。
私は(... Alamofire
、Kingfisher
などのようなSDKを使用して)することを試みたが、その後細胞(UITableViewAutomaticDimension
)のサイズは(あるため、動的高さ)混乱してスクロールしながら、画像が間違ったイメージに変更時にはスクロール中にクラッシュすることもあります。
ここで私はここで質問しています。バックグラウンドスレッドでセルを読み込み、動的サイズ、正しい写真を維持したり、クラッシュを避けるにはどうすればいいですか?
お返事ありがとうございました。
注:私はあなたのお気に入りを選択し、スウィフトとObjective-Cの両方を知っている:)
上記の要件を達成するには、 'SDWebImage'ライブラリの本当に良いオプションを試してみましたか? – CodeChanger