轻量级 iOS 图片预览组件,支持手势缩放和跨技术栈兼容性 (WebView/Flutter)。凭借其解耦的架构设计,它实现了无缝集成并提供原生级别的过渡动画。
您可以使用 Swift Package Manager (SPM) 安装 PhotoPreview
。为此,请按照以下步骤操作
File
> Add Packages...
。https://github.com/xiaoxiaowesley/PhotoPreview.git
。Add Package
。使用 PhotoPreviewViewController
主要有两种方式:通过原生 UIImageView 或跨平台使用 (在 WebView 中)。
获取 UIImageView
对象,并为点击的图片创建一个 ImageInfo
对象。然后,使用 ImageInfo
对象创建一个 PhotoPreviewViewController
并将其展示出来。
guard let image = imageView.image else { return }
let frameOfImage = imageView.convert(imageView.bounds, to: UIApplication.shared.windows.first)
// Create ImageInfo for the tapped image
let imageInfo = ImageInfo(image: PhotoPreviewUIImageImage(image: image),
frame: frameOfImage,
size: image.size,
contentMode: imageView.contentMode)
// Create PhotoPreviewViewController
let vc = PhotoPreviewViewController(target: PhotoPreview.Target(targetIndex: index, imageInfos: [imageInfo]))
vc.modalPresentationStyle = .custom
vc.transitioningDelegate = vc
vc.delegate = self
present(vc, animated: true)
获取图片 URL、图片在屏幕坐标中的矩形以及源图片的大小。然后,创建一个 ImageInfo 对象。最后,使用 ImageInfo 对象创建一个 PhotoPreviewViewController 并将其展示出来。
// Get the image URL
let url = ...
// Get the image rect in Screen coordinates
let rectInScreen = ..
// Get the source image size
let height = ..
let width = ..
// Create ImageInfo directly for the image
let imageInfo = ImageInfo(image: url,
frame: rectInScreen,
size: CGSize(width: width, height: height),
contentMode: .scaleAspectFill)
// Create PhotoPreviewViewController with a single image info
let vc = PhotoPreviewViewController(target: PhotoPreview.Target(targetIndex: 0, imageInfos: [imageInfo]))
vc.modalPresentationStyle = .custom
vc.transitioningDelegate = vc
vc.delegate = self
present(vc, animated: true)