QMUIImagePreviewViewTransitionAnimator
@interface QMUIImagePreviewViewTransitionAnimator
: NSObject <UIViewControllerAnimatedTransitioning>
负责处理 QMUIImagePreviewViewController 被 present/dismiss 时的动画,如果需要自定义动画效果,可按需修改 animationEnteringBlock、animationBlock、animationCompletionBlock。
See
QMUIImagePreviewViewController.transitioningAnimator-
当前图片预览控件的引用,在为 QMUIImagePreviewViewController.transitioningAnimator 赋值时会自动建立这个引用关系
Declaration
Objective-C
@property (nonatomic, weak) QMUIImagePreviewViewController *_Nullable imagePreviewViewController;
Swift
weak var imagePreviewViewController: QMUIImagePreviewViewController? { get set }
-
转场动画的持续时长,默认为 0.25
Declaration
Objective-C
@property (nonatomic) NSTimeInterval duration;
Swift
var duration: TimeInterval { get set }
-
当 sourceImageView 本身带圆角时,动画过程中会通过这个 layer 来处理圆角的动画
Declaration
Objective-C
@property (nonatomic, strong, readonly) CALayer *_Nonnull cornerRadiusMaskLayer;
Swift
var cornerRadiusMaskLayer: CALayer { get }
-
动画开始前的准备工作可以在这里做
Declaration
Objective-C
@property (nonatomic, copy) void (^_Nonnull) (__kindof QMUIImagePreviewViewTransitionAnimator *_Nonnull, BOOL, QMUIImagePreviewViewControllerTransitioningStyle, CGRect, QMUIZoomImageView *_Nonnull, id<UIViewControllerContextTransitioning> _Nullable) animationEnteringBlock;
Swift
var animationEnteringBlock: (QMUIImagePreviewViewTransitionAnimator, Bool, QMUIImagePreviewViewControllerTransitioningStyle, CGRect, QMUIZoomImageView, UIViewControllerContextTransitioning?) -> Void { get set }
Parameters
animator
当前的动画器 animator
isPresenting
YES 表示当前正在 present,NO 表示正在 dismiss
style
当前动画的样式
sourceImageRect
原界面上显示图片的 view 在 imagePreviewViewController.view 坐标系里的 rect,仅在 style 为 zoom 时有值,style 为 fade 时为 CGRectZero
zoomImageView
当前图片
transitionContext
转场动画的上下文,可通过它获取前后界面、动画容器等信息
-
转场时的实际动画内容,整个 block 会在一个 UIView animation block 里被调用,因此直接写动画内容即可,无需包裹一个 animation block
Declaration
Objective-C
@property (nonatomic, copy) void (^_Nonnull) (__kindof QMUIImagePreviewViewTransitionAnimator *_Nonnull, BOOL, QMUIImagePreviewViewControllerTransitioningStyle, CGRect, QMUIZoomImageView *_Nonnull, id<UIViewControllerContextTransitioning> _Nullable) animationBlock;
Swift
var animationBlock: (QMUIImagePreviewViewTransitionAnimator, Bool, QMUIImagePreviewViewControllerTransitioningStyle, CGRect, QMUIZoomImageView, UIViewControllerContextTransitioning?) -> Void { get set }
Parameters
animator
当前的动画器 animator
isPresenting
YES 表示当前正在 present,NO 表示正在 dismiss
style
当前动画的样式
sourceImageRect
原界面上显示图片的 view 在 imagePreviewViewController.view 坐标系里的 rect,仅在 style 为 zoom 时有值,style 为 fade 时为 CGRectZero
zoomImageView
当前图片
transitionContext
转场动画的上下文,可通过它获取前后界面、动画容器等信息
-
动画结束后的事情,在执行完这个 block 后才会调用 [transitionContext completeTransition:]
Declaration
Objective-C
@property (nonatomic, copy) void (^_Nonnull) (__kindof QMUIImagePreviewViewTransitionAnimator *_Nonnull, BOOL, QMUIImagePreviewViewControllerTransitioningStyle, CGRect, QMUIZoomImageView *_Nonnull, id<UIViewControllerContextTransitioning> _Nullable) animationCompletionBlock;
Swift
var animationCompletionBlock: (QMUIImagePreviewViewTransitionAnimator, Bool, QMUIImagePreviewViewControllerTransitioningStyle, CGRect, QMUIZoomImageView, UIViewControllerContextTransitioning?) -> Void { get set }
Parameters
animator
当前的动画器 animator
isPresenting
YES 表示当前正在 present,NO 表示正在 dismiss
style
当前动画的样式
sourceImageRect
原界面上显示图片的 view 在 imagePreviewViewController.view 坐标系里的 rect,仅在 style 为 zoom 时有值,style 为 fade 时为 CGRectZero
zoomImageView
当前图片
transitionContext
转场动画的上下文,可通过它获取前后界面、动画容器等信息