UIImagePickerController是系统为我们提供的照片/视频采集器,可以拍摄照片/视频,或者从相册选择。但是这个类有一个bug,在从相册选择照片/视频的时候,如果是类似6S的支持3DTouch的机型,会造成Crash。
原因是系统请求
- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location
等3DTouch相关的方法,而这个类是苹果自己写的,这个类里并没有支持3DTouch。
解决办法是对UICollectionViewController写一个扩展,对3DTouch的方法返回空,也就是告诉系统不支持3DTouch,就可以了:
UICollectionViewController+FixImagePickerCrash.h:
#import <UIKit/UIKit.h>
@interface UICollectionViewController (FixImagePickerCrash) <UIViewControllerPreviewingDelegate>
@end
UICollectionViewController+FixImagePickerCrash.m:
#import "UICollectionViewController+FixImagePickerCrash.h"
@implementation UICollectionViewController (FixImagePickerCrash)
- (void)previewingContext:(id<UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit {
return;
}
- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location {
return nil;
}
@end