UIImagePickerController是系統(tǒng)為我們提供的照片/視頻采集器,可以拍攝照片/視頻,或者從相冊選擇。但是這個(gè)類有一個(gè)bug,在從相冊選擇照片/視頻的時(shí)候,如果是類似6S的支持3DTouch的機(jī)型,會(huì)造成Crash。
原因是系統(tǒng)請求
- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location
等3DTouch相關(guān)的方法,而這個(gè)類是蘋果自己寫的,這個(gè)類里并沒有支持3DTouch。
解決辦法是對UICollectionViewController寫一個(gè)擴(kuò)展,對3DTouch的方法返回空,也就是告訴系統(tǒng)不支持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