業界常見做法(微博、微信、QQ)
- 伺服器端預處理:上傳時產生兩張圖——
① 縮略圖(含裁切版)用於列表/首頁顯示。
② 原圖/高清圖用於詳情頁。
- App 端顯示策略:
- 列表/首頁:使用
UIImageView,設定 contentMode = .scaleAspectFill 並 clipsToBounds = true,超出區域自動裁切;右下角疊加「長圖」標識。
- 詳情頁:使用
UIScrollView + UIImageView,支援上下滑動、雙指縮放。網上有成熟 Demo(如 MWPhotoBrowser、YYImage)。
關鍵程式碼片段
// 列表頁縮略圖裁切
imageView.contentMode = .scaleAspectFill
imageView.clipsToBounds = true
// 詳情頁可縮放滾動
let scrollView = UIScrollView(frame: view.bounds)
scrollView.delegate = self
scrollView.minimumZoomScale = 1.0
scrollView.maximumZoomScale = 3.0
let imageView = UIImageView(image: fullImage)
scrollView.addSubview(imageView)
scrollView.contentSize = imageView.bounds.size
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return imageView
}
進階優化
- 大圖分塊載入(CATiledLayer / YYImage)避免記憶體暴增。
- 列表頁使用低解析度佔位圖,滾動停止後再換高清圖。