Skip to content

Commit

Permalink
新版本更新,包含 iOS 11 适配等大量更新点
Browse files Browse the repository at this point in the history
  • Loading branch information
MoLice committed Dec 2, 2017
1 parent ca92e3b commit f7f7c86
Show file tree
Hide file tree
Showing 91 changed files with 2,252 additions and 1,738 deletions.
2 changes: 1 addition & 1 deletion QMUIConfigurationTemplate/QMUIConfigurationTemplate.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
//
// QMUIConfigurationTemplate.h
//
// Created by QQMail on 15/3/29.
// Created by QMUI Team on 15/3/29.
// Copyright (c) 2015年 QMUI Team. All rights reserved.
//

Expand Down
12 changes: 10 additions & 2 deletions QMUIConfigurationTemplate/QMUIConfigurationTemplate.m
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// QMUIConfigurationTemplate.m
// qmui
//
// Created by QQMail on 15/3/29.
// Created by QMUI Team on 15/3/29.
// Copyright (c) 2015年 QMUI Team. All rights reserved.
//

Expand Down Expand Up @@ -79,7 +79,7 @@ + (void)setupConfigurationTemplate {
QMUICMI.navBarBackgroundImage = nil; // NavBarBackgroundImage : UINavigationBar 的背景图
QMUICMI.navBarShadowImage = nil; // NavBarShadowImage : UINavigationBar.shadowImage,也即导航栏底部那条分隔线
QMUICMI.navBarBarTintColor = nil; // NavBarBarTintColor : UINavigationBar.barTintColor,也即背景色
QMUICMI.navBarTintColor = nil; // NavBarTintColor : UINavigationBar 的 tintColor,也即导航栏上面的按钮颜色
QMUICMI.navBarTintColor = nil; // NavBarTintColor : QMUINavigationBar 的 tintColor,也即导航栏上面的按钮颜色
QMUICMI.navBarTitleColor = UIColorBlack; // NavBarTitleColor : UINavigationBar 的标题颜色,以及 QMUINavigationTitleView 的默认文字颜色
QMUICMI.navBarTitleFont = nil; // NavBarTitleFont : UINavigationBar 的标题字体,以及 QMUINavigationTitleView 的默认字体
QMUICMI.navBarBackButtonTitlePositionAdjustment = UIOffsetZero; // NavBarBarBackButtonTitlePositionAdjustment : 导航栏返回按钮的文字偏移
Expand Down Expand Up @@ -129,6 +129,8 @@ + (void)setupConfigurationTemplate {

#pragma mark - TableView / TableViewCell

QMUICMI.tableViewEstimatedHeightEnabled = YES; // TableViewEstimatedHeightEnabled : 是否要开启全局 UITableView 的 estimatedRow(Section/Footer)Height

QMUICMI.tableViewBackgroundColor = nil; // TableViewBackgroundColor : Plain 类型的 QMUITableView 的背景色颜色
QMUICMI.tableViewGroupedBackgroundColor = nil; // TableViewGroupedBackgroundColor : Grouped 类型的 QMUITableView 的背景色
QMUICMI.tableSectionIndexColor = nil; // TableSectionIndexColor : 列表右边的字母索引条的文字颜色
Expand Down Expand Up @@ -169,6 +171,11 @@ + (void)setupConfigurationTemplate {
QMUICMI.windowLevelQMUIAlertView = UIWindowLevelAlert - 4.0; // UIWindowLevelQMUIAlertView : QMUIModalPresentationViewController、QMUIPopupContainerView 里使用的 UIWindow 的 windowLevel
QMUICMI.windowLevelQMUIImagePreviewView = UIWindowLevelStatusBar + 1.0; // UIWindowLevelQMUIImagePreviewView : QMUIImagePreviewViewController 里使用的 UIWindow 的 windowLevel

#pragma mark - QMUILog
QMUICMI.shouldPrintDefaultLog = YES; // ShouldPrintDefaultLog : 是否允许输出 QMUILogLevelDefault 级别的 log
QMUICMI.shouldPrintInfoLog = YES; // ShouldPrintInfoLog : 是否允许输出 QMUILogLevelInfo 级别的 log
QMUICMI.shouldPrintWarnLog = YES; // ShouldPrintInfoLog : 是否允许输出 QMUILogLevelWarn 级别的 log

#pragma mark - Others

QMUICMI.supportedOrientationMask = UIInterfaceOrientationMaskPortrait; // SupportedOrientationMask : 默认支持的横竖屏方向
Expand All @@ -177,6 +184,7 @@ + (void)setupConfigurationTemplate {
QMUICMI.needsBackBarButtonItemTitle = NO; // NeedsBackBarButtonItemTitle : 全局是否需要返回按钮的 title,不需要则只显示一个返回image
QMUICMI.hidesBottomBarWhenPushedInitially = NO; // HidesBottomBarWhenPushedInitially : QMUICommonViewController.hidesBottomBarWhenPushed 的初始值,默认为 NO,以保持与系统默认值一致,但通常建议改为 YES,因为一般只有 tabBar 首页那几个界面要求为 NO
QMUICMI.navigationBarHiddenInitially = NO; // NavigationBarHiddenInitially : QMUINavigationControllerDelegate preferredNavigationBarHidden 的初始值,默认为NO
QMUICMI.shouldFixTabBarTransitionBugInIPhoneX = NO; // ShouldFixTabBarTransitionBugInIPhoneX : 是否需要自动修复 iOS 11 下,iPhone X 的设备在 push 界面时,tabBar 会瞬间往上跳的 bug
}

@end
48 changes: 22 additions & 26 deletions QMUIKit/QMUIComponents/AssetLibrary/QMUIAsset.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,17 @@

/// Asset 的类型
typedef NS_ENUM(NSUInteger, QMUIAssetType) {
QMUIAssetTypeUnknow, // 未知类型的 Asset
QMUIAssetTypeImage, // 图片类型的 Asset
QMUIAssetTypeVideo, // 视频类型的 Asset
QMUIAssetTypeAudio NS_ENUM_AVAILABLE_IOS(8_0), // 音频类型的 Asset,仅被 PhotoKit 支持,因此只适用于 iOS 8.0
QMUIAssetTypeLivePhoto NS_ENUM_AVAILABLE_IOS(9_1) // Live Photo 类型的 Asset,仅被 PhotoKit 支持,因此只适用于 iOS 9.1
QMUIAssetTypeUnknow, // 未知类型的 Asset
QMUIAssetTypeImage, // 图片类型的 Asset
QMUIAssetTypeVideo, // 视频类型的 Asset
QMUIAssetTypeAudio // 音频类型的 Asset
};

typedef NS_ENUM(NSUInteger, QMUIAssetSubType) {
QMUIAssetSubTypeUnknow, // 未知类型
QMUIAssetSubTypeImage, // 静态图片类型
QMUIAssetSubTypeLivePhoto NS_ENUM_AVAILABLE_IOS(9_1), // Live Photo 类型
QMUIAssetSubTypeGIF // GIF类型
};

/// 从 iCloud 请求 Asset 大图的状态
Expand All @@ -27,17 +33,15 @@ typedef NS_ENUM(NSUInteger, QMUIAssetDownloadStatus) {
};


@class ALAsset;
@class PHAsset;

@interface QMUIAsset : NSObject

@property(nonatomic, assign, readonly) QMUIAssetType assetType;
@property(nonatomic, assign, readonly) QMUIAssetSubType assetSubType;

- (instancetype)initWithPHAsset:(PHAsset *)phAsset;

- (instancetype)initWithALAsset:(ALAsset *)alAsset;

@property(nonatomic, assign, readonly) QMUIAssetDownloadStatus downloadStatus; // 从 iCloud 下载资源大图的状态
@property(nonatomic, assign) double downloadProgress; // 从 iCloud 下载资源大图的进度
@property(nonatomic, assign) NSInteger requestID; // 从 iCloud 请求获得资源的大图的请求 ID
Expand All @@ -48,7 +52,7 @@ typedef NS_ENUM(NSUInteger, QMUIAssetDownloadStatus) {
/**
* Asset 的缩略图
*
* @param size 指定返回的缩略图的大小,仅在 iOS 8.0 及以上的版本有效,其他版本则调用 ALAsset 的接口由系统返回一个合适当前平台的图片
* @param size 指定返回的缩略图的大小
*
* @return Asset 的缩略图
*/
Expand All @@ -57,29 +61,27 @@ typedef NS_ENUM(NSUInteger, QMUIAssetDownloadStatus) {
/**
* Asset 的预览图
*
* @warning 仿照 ALAssetsLibrary 的做法输出与当前设备屏幕大小相同尺寸的图片,如果图片原图小于当前设备屏幕的尺寸,则只输出原图大小的图片
* @warning 输出与当前设备屏幕大小相同尺寸的图片,如果图片原图小于当前设备屏幕的尺寸,则只输出原图大小的图片
* @return Asset 的全屏图
*/
- (UIImage *)previewImage;

/**
* 异步请求 Asset 的原图,包含了系统照片“编辑”功能处理后的效果(剪裁,旋转和滤镜等),可能会有网络请求
*
* @param completion 完成请求后调用的 block,参数中包含了请求的原图以及图片信息,在 iOS 8.0 或以上版本中
* 这个 block 会被多次调用,其中第一次调用获取到的尺寸很小的低清图,然后不断调用,直到获取到高清图。
* @param completion 完成请求后调用的 block,参数中包含了请求的原图以及图片信息,这个 block 会被多次调用
* 其中第一次调用获取到的尺寸很小的低清图,然后不断调用,直到获取到高清图。
* @param phProgressHandler 处理请求进度的 handler,不在主线程上执行,在 block 中修改 UI 时注意需要手工放到主线程处理。
*
* @wraning iOS 8.0 以下中并没有异步请求预览图的接口,因此实际上为同步请求,这时 block 中的第二个参数(图片信息)返回的为 nil。
*
* @return 返回请求图片的请求 id
*/
- (NSInteger)requestOriginImageWithCompletion:(void (^)(UIImage *result, NSDictionary<NSString *, id> *info))completion withProgressHandler:(PHAssetImageProgressHandler)phProgressHandler;

/**
* 异步请求 Asset 的缩略图,不会产生网络请求
*
* @param size 指定返回的缩略图的大小,仅在 iOS 8.0 及以上的版本有效,其他版本则调用 ALAsset 的接口由系统返回一个合适当前平台的图片
* @param completion 完成请求后调用的 block,参数中包含了请求的缩略图以及图片信息,在 iOS 8.0 或以上版本中,这个 block 会被多次调用,
* @param size 指定返回的缩略图的大小
* @param completion 完成请求后调用的 block,参数中包含了请求的缩略图以及图片信息,这个 block 会被多次调用,
* 其中第一次调用获取到的尺寸很小的低清图,然后不断调用,直到获取到高清图,这时 block 中的第二个参数(图片信息)返回的为 nil。
*
* @return 返回请求图片的请求 id
Expand All @@ -89,12 +91,10 @@ typedef NS_ENUM(NSUInteger, QMUIAssetDownloadStatus) {
/**
* 异步请求 Asset 的预览图,可能会有网络请求
*
* @param completion 完成请求后调用的 block,参数中包含了请求的预览图以及图片信息,在 iOS 8.0 或以上版本中
* 这个 block 会被多次调用,其中第一次调用获取到的尺寸很小的低清图,然后不断调用,直到获取到高清图。
* @param completion 完成请求后调用的 block,参数中包含了请求的预览图以及图片信息,这个 block 会被多次调用
* 其中第一次调用获取到的尺寸很小的低清图,然后不断调用,直到获取到高清图。
* @param phProgressHandler 处理请求进度的 handler,不在主线程上执行,在 block 中修改 UI 时注意需要手工放到主线程处理。
*
* @wraning iOS 8.0 以下中并没有异步请求预览图的接口,因此实际上为同步请求,这时 block 中的第二个参数(图片信息)返回的为 nil。
*
* @return 返回请求图片的请求 id
*/
- (NSInteger)requestPreviewImageWithCompletion:(void (^)(UIImage *result, NSDictionary<NSString *, id> *info))completion withProgressHandler:(PHAssetImageProgressHandler)phProgressHandler;
Expand All @@ -117,20 +117,16 @@ typedef NS_ENUM(NSUInteger, QMUIAssetDownloadStatus) {
* @param completion 完成请求后调用的 block,参数中包含了请求的 AVPlayerItem 以及相关信息,若 assetType 不是 QMUIAssetTypeVideo 则为 nil
* @param phProgressHandler 处理请求进度的 handler,不在主线程上执行,在 block 中修改 UI 时注意需要手工放到主线程处理。
*
* @wraning iOS 8.0 以下中并没有异步请求 AVPlayerItem 的接口,因此实际上为同步请求,这时 block 中的第二个参数(AVPlayerItem 相关信息)返回的为 nil。
*
* @return 返回请求 AVPlayerItem 的请求 id
*/
- (NSInteger)requestPlayerItemWithCompletion:(void (^)(AVPlayerItem *playerItem, NSDictionary<NSString *, id> *info))completion withProgressHandler:(PHAssetVideoProgressHandler)phProgressHandler;

/**
* 异步请求图片的 Data
*
* @param completion 完成请求后调用的 block,参数中包含了请求的图片 Data(若 assetType 不是 QMUIAssetTypeImage 或 QMUIAssetTypeLivePhoto 则为 nil),以及该图片是否为 GIF 的判断值
*
* @wraning iOS 8.0 以下中并没有异步请求 Data 的接口,因此实际上为同步请求,这时 block 中的第二个参数(图片信息)返回的为 nil。
* @param completion 完成请求后调用的 block,参数中包含了请求的图片 Data(若 assetType 不是 QMUIAssetTypeImage 或 QMUIAssetTypeLivePhoto 则为 nil),该图片是否为 GIF 的判断值,以及该图片的文件格式是否为 HEIC
*/
- (void)requestImageData:(void (^)(NSData *imageData, NSDictionary<NSString *, id> *info, BOOL isGif))completion;
- (void)requestImageData:(void (^)(NSData *imageData, NSDictionary<NSString *, id> *info, BOOL isGIF, BOOL isHEIC))completion;

/**
* 获取图片的 UIImageOrientation 值,仅 assetType 为 QMUIAssetTypeImage 或 QMUIAssetTypeLivePhoto 时有效
Expand Down
Loading

0 comments on commit f7f7c86

Please sign in to comment.