FWImagePreviewController


@interface FWImagePreviewController
    : UIViewController <UIViewControllerTransitioningDelegate>

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

使用方式:

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

    Declaration

    Objective-C

    @property (nonatomic, strong, nullable) UIColor *backgroundColor;
  • Undocumented

    Declaration

    Objective-C

    @property(null_resettable, nonatomic, strong, readonly) FWImagePreviewView *imagePreviewView
  • 以 present 方式进入大图预览的时候使用的转场动画 animator,可通过 FWImagePreviewTransitionAnimator 提供的若干个 block 属性自定义动画,也可以完全重写一个自己的 animator。

    Declaration

    Objective-C

    @property (nonatomic, strong, nullable) __kindof FWImagePreviewTransitionAnimator *transitioningAnimator;
  • present 时的动画,默认为 fade,当修改了 presentingStyle 时会自动把 dismissingStyle 也修改为相同的值。

    Declaration

    Objective-C

    @property (nonatomic) FWImagePreviewTransitioningStyle presentingStyle;
  • dismiss 时的动画,默认为 fade,默认与 presentingStyle 的值相同,若需要与之不同,请在设置完 presentingStyle 之后再设置 dismissingStyle。

    Declaration

    Objective-C

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

    Declaration

    Objective-C

    @property (nonatomic, copy, nullable) id _Nullable (^)(NSInteger) sourceImageView;
  • 当以 zoom 动画进入/退出大图预览时,会通过这个 block 获取到原本界面上的图片所在的 view,从而进行动画的位置计算,如果返回的值为 CGRectZero,则会强制使用 fade 动画。注意返回值要进行坐标系转换。当同时存在 sourceImageView 和 sourceImageRect 时,只有 sourceImageRect 会被调用。

    Declaration

    Objective-C

    @property (nonatomic, copy, nullable) CGRect (^)(NSInteger) sourceImageRect;
  • 当以 zoom 动画进入/退出大图预览时,可以指定一个圆角值,默认为 FWImagePreviewCornerRadiusAutomaticDimension,也即自动从 sourceImageView.layer.cornerRadius 获取,如果使用的是 sourceImageRect 或希望自定义圆角值,则直接给 sourceImageCornerRadius 赋值即可。

    Declaration

    Objective-C

    @property (nonatomic) CGFloat sourceImageCornerRadius;
  • 是否支持手势拖拽退出预览模式,默认为 YES。仅对以 present 方式进入大图预览的场景有效。

    Declaration

    Objective-C

    @property (nonatomic) BOOL dismissingGestureEnabled;
  • 手势单击图片时是否退出预览模式,默认NO。仅对以 present 方式进入大图预览的场景有效。

    Declaration

    Objective-C

    @property (nonatomic) BOOL dismissingWhenTappedImage;
  • 手势单击视频时是否退出预览模式,默认NO。仅对以 present 方式进入大图预览的场景有效。

    Declaration

    Objective-C

    @property (nonatomic) BOOL dismissingWhenTappedVideo;
  • 当前页数发生变化回调,默认nil

    Declaration

    Objective-C

    @property (nonatomic, copy, nullable) void (^)(NSInteger) pageIndexChanged;
  • 是否显示页数标签,默认NO

    Declaration

    Objective-C

    @property (nonatomic) BOOL showsPageLabel;
  • 页数标签,默认字号16、白色

    Declaration

    Objective-C

    @property (nonatomic, strong, readonly) UILabel *_Nonnull pageLabel;
  • 页数标签中心句柄,默认nil时离底部安全距离+18

    Declaration

    Objective-C

    @property (nonatomic, copy, nullable) CGPoint (^)(void) pageLabelCenter;
  • 页数标签需要更新,子类可重写

    Declaration

    Objective-C

    - (void)updatePageLabel;
  • 处理单击关闭事件,子类可重写

    Declaration

    Objective-C

    - (void)dismissingWhenTapped:(nonnull FWZoomImageView *)zoomImageView;
  • 触发拖动手势或dismiss时切换子视图显示或隐藏,子类可重写

    Declaration

    Objective-C

    - (void)dismissingGestureChanged:(BOOL)isHidden;