ImagePreviewTransitionAnimator

@MainActor
open class ImagePreviewTransitionAnimator : NSObject, UIViewControllerAnimatedTransitioning

负责处理 ImagePreviewController 被 present/dismiss 时的动画,如果需要自定义动画效果,可按需修改 animationEnteringBlock、animationBlock、animationCompletionBlock。

  • 当前图片预览控件的引用,在为 ImagePreviewController.transitioningAnimator 赋值时会自动建立这个引用关系

    Declaration

    Swift

    @MainActor
    open weak var imagePreviewViewController: ImagePreviewController?
  • 转场动画的持续时长,默认为 0.25

    Declaration

    Swift

    @MainActor
    open var duration: TimeInterval
  • 当 sourceImageView 本身带圆角时,动画过程中会通过这个 layer 来处理圆角的动画

    Declaration

    Swift

    @MainActor
    open lazy var cornerRadiusMaskLayer: CALayer { get set }
  • 动画开始前的准备工作可以在这里做

    animator 当前的动画器 animator isPresenting YES 表示当前正在 present,NO 表示正在 dismiss style 当前动画的样式 sourceImageRect 原界面上显示图片的 view 在 imagePreviewViewController.view 坐标系里的 rect,仅在 style 为 zoom 时有值,style 为 fade 时为 CGRectZero zoomImageView 当前图片 transitionContext 转场动画的上下文,可通过它获取前后界面、动画容器等信息

    Declaration

    Swift

    @MainActor
    open var animationEnteringBlock: (@MainActor @Sendable (_ animator: ImagePreviewTransitionAnimator, _ isPresenting: Bool, _ style: ImagePreviewTransitioningStyle, _ sourceImageRect: CGRect, _ zoomImageView: ZoomImageView, _ transitionContext: UIViewControllerContextTransitioning?) -> Void)?
  • 转场时的实际动画内容,整个 block 会在一个 UIView animation block 里被调用,因此直接写动画内容即可,无需包裹一个 animation block

    animator 当前的动画器 animator isPresenting YES 表示当前正在 present,NO 表示正在 dismiss style 当前动画的样式 sourceImageRect 原界面上显示图片的 view 在 imagePreviewViewController.view 坐标系里的 rect,仅在 style 为 zoom 时有值,style 为 fade 时为 CGRectZero zoomImageView 当前图片 transitionContext 转场动画的上下文,可通过它获取前后界面、动画容器等信息

    Declaration

    Swift

    @MainActor
    open var animationBlock: (@MainActor @Sendable (_ animator: ImagePreviewTransitionAnimator, _ isPresenting: Bool, _ style: ImagePreviewTransitioningStyle, _ sourceImageRect: CGRect, _ zoomImageView: ZoomImageView, _ transitionContext: UIViewControllerContextTransitioning?) -> Void)?
  • 动画结束后的事情,在执行完这个 block 后才会调用 [transitionContext completeTransition:]

    animator 当前的动画器 animator isPresenting YES 表示当前正在 present,NO 表示正在 dismiss style 当前动画的样式 sourceImageRect 原界面上显示图片的 view 在 imagePreviewViewController.view 坐标系里的 rect,仅在 style 为 zoom 时有值,style 为 fade 时为 CGRectZero zoomImageView 当前图片 transitionContext 转场动画的上下文,可通过它获取前后界面、动画容器等信息

    Declaration

    Swift

    @MainActor
    open var animationCompletionBlock: (@MainActor @Sendable (_ animator: ImagePreviewTransitionAnimator, _ isPresenting: Bool, _ style: ImagePreviewTransitioningStyle, _ sourceImageRect: CGRect, _ zoomImageView: ZoomImageView, _ transitionContext: UIViewControllerContextTransitioning?) -> Void)?
  • 动画回调句柄,动画开始和结束时调用

    animator 当前的动画器 animator isPresenting YES 表示当前正在 present,NO 表示正在 dismiss isFinished YES 表示动画结束,NO 表示动画开始

    Declaration

    Swift

    @MainActor
    open var animationCallbackBlock: (@MainActor @Sendable (_ animator: ImagePreviewTransitionAnimator, _ isPresenting: Bool, _ isFinished: Bool) -> Void)?
  • Undocumented

    Declaration

    Swift

    @MainActor
    override public init()

UIViewControllerAnimatedTransitioning

  • Undocumented

    Declaration

    Swift

    @MainActor
    open func animateTransition(using transitionContext: UIViewControllerContextTransitioning)
  • Undocumented

    Declaration

    Swift

    @MainActor
    open func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval