ImagePreviewController

@MainActor
open class ImagePreviewController : UIViewController, UIViewControllerTransitioningDelegate

图片预览控件,主要功能由内部自带的 ImagePreviewView 提供,由于以 viewController 的形式存在,所以适用于那种在单独界面里展示图片,或者需要从某张目标图片的位置以动画的形式放大进入预览界面的场景。

使用方式:

  1. 使用 init 方法初始化
  2. 添加 self.imagePreviewView 的 delegate
  3. 以 push 或 present 的方式打开界面。如果是 present,则支持 ImagePreviewTransitioningStyle 里定义的动画。特别地,如果使用 zoom 方式,则需要通过 sourceImageView() 返回一个原界面上的 view 以作为 present 动画的起点和 dismiss 动画的终点。
  • 图片背后的黑色背景,默认为黑色

    Declaration

    Swift

    @MainActor
    open var backgroundColor: UIColor? { get set }
  • 以 present 方式进入大图预览的时候使用的转场动画 animator,可通过 ImagePreviewTransitionAnimator 提供的若干个 block 属性自定义动画,也可以完全重写一个自己的 animator。

    Declaration

    Swift

    @MainActor
    open var transitioningAnimator: ImagePreviewTransitionAnimator? { get set }
  • present 时的动画,默认为 fade,当修改了 presentingStyle 时会自动把 dismissingStyle 也修改为相同的值。

    Declaration

    Swift

    @MainActor
    open var presentingStyle: ImagePreviewTransitioningStyle { get set }
  • dismiss 时的动画,默认为 fade,默认与 presentingStyle 的值相同,若需要与之不同,请在设置完 presentingStyle 之后再设置 dismissingStyle。

    Declaration

    Swift

    @MainActor
    open var dismissingStyle: ImagePreviewTransitioningStyle
  • 当以 zoom 动画进入/退出大图预览时,会通过这个 block 获取到原本界面上的图片所在的 view,从而进行动画的位置计算,如果返回的值为 nil,则会强制使用 fade 动画。当同时存在 sourceImageView 和 sourceImageRect 时,只有 sourceImageRect 会被调用。支持UIView|NSValue.CGRect类型

    Declaration

    Swift

    @MainActor
    open var sourceImageView: ((_ index: Int) -> Any?)?
  • 当以 zoom 动画进入/退出大图预览时,会通过这个 block 获取到原本界面上的图片所在的 view,从而进行动画的位置计算,如果返回的值为 CGRectZero,则会强制使用 fade 动画。注意返回值要进行坐标系转换。当同时存在 sourceImageView 和 sourceImageRect 时,只有 sourceImageRect 会被调用。

    Declaration

    Swift

    @MainActor
    open var sourceImageRect: ((_ index: Int) -> CGRect)?
  • 当以 zoom 动画进入/退出大图预览时,可以指定一个圆角值,默认为 -1(小于0即可),也即自动从 sourceImageView.layer.cornerRadius 获取,如果使用的是 sourceImageRect 或希望自定义圆角值,则直接给 sourceImageCornerRadius 赋值即可。

    Declaration

    Swift

    @MainActor
    open var sourceImageCornerRadius: CGFloat
  • 手势拖拽退出预览模式时是否启用缩放效果,默认YES。仅对以 present 方式进入大图预览的场景有效。

    Declaration

    Swift

    @MainActor
    open var dismissingScaleEnabled: Bool
  • 是否支持手势拖拽退出预览模式,默认为 YES。仅对以 present 方式进入大图预览的场景有效。

    Declaration

    Swift

    @MainActor
    open var dismissingGestureEnabled: Bool
  • 手势单击图片时是否退出预览模式,默认NO。仅对以 present 方式进入大图预览的场景有效。

    Declaration

    Swift

    @MainActor
    open var dismissingWhenTappedImage: Bool
  • 手势单击视频时是否退出预览模式,默认NO。仅对以 present 方式进入大图预览的场景有效。

    Declaration

    Swift

    @MainActor
    open var dismissingWhenTappedVideo: Bool
  • 当前页数发生变化回调,默认nil

    Declaration

    Swift

    @MainActor
    open var pageIndexChanged: ((_ index: Int) -> Void)?
  • 是否显示页数标签,默认NO

    Declaration

    Swift

    @MainActor
    open var showsPageLabel: Bool { get set }
  • 页数标签中心句柄,默认nil时离底部安全距离+18

    Declaration

    Swift

    @MainActor
    open var pageLabelCenter: (() -> CGPoint)?
  • 页数文本句柄,默认nil时为index / count

    Declaration

    Swift

    @MainActor
    open var pageLabelText: ((_ index: Int, _ count: Int) -> String)?
  • 图片预览视图

    Declaration

    Swift

    @MainActor
    open lazy var imagePreviewView: ImagePreviewView { get set }
  • 页数标签,默认字号16、白色

    Declaration

    Swift

    @MainActor
    open lazy var pageLabel: UILabel { get set }
  • Undocumented

    Declaration

    Swift

    @MainActor
    public override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?)
  • Undocumented

    Declaration

    Swift

    @MainActor
    public required init?(coder: NSCoder)
  • Undocumented

    Declaration

    Swift

    @MainActor
    open override func viewDidLoad()
  • Undocumented

    Declaration

    Swift

    @MainActor
    open override func viewDidLayoutSubviews()
  • Undocumented

    Declaration

    Swift

    @MainActor
    open override func viewWillAppear(_ animated: Bool)
  • Undocumented

    Declaration

    Swift

    @MainActor
    open override func viewDidDisappear(_ animated: Bool)
  • Undocumented

    Declaration

    Swift

    @MainActor
    open override var prefersStatusBarHidden: Bool { get }
  • Undocumented

    Declaration

    Swift

    @MainActor
    open override var preferredStatusBarStyle: UIStatusBarStyle { get }
  • Undocumented

    Declaration

    Swift

    @MainActor
    open override func dismiss(animated flag: Bool, completion: (() -> Void)? = nil)
  • 页数标签需要更新,子类可重写

    Declaration

    Swift

    @MainActor
    open func updatePageLabel()
  • 处理单击关闭事件,子类可重写

    Declaration

    Swift

    @MainActor
    open func dismissingWhenTapped(_ zoomImageView: ZoomImageView)
  • 触发拖动手势或dismiss时切换子视图显示或隐藏,子类可重写

    Declaration

    Swift

    @MainActor
    open func dismissingGestureChanged(_ isHidden: Bool)
  • Undocumented

    Declaration

    Swift

    @MainActor
    open func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning?
  • Undocumented

    Declaration

    Swift

    @MainActor
    open func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning?