問題
在拍照頁面中雙指捏合後會出現CMKZoomSlider,這個view出現後會在5s後自動消失。如果在它消失前的一剎那點擊“取消”將拍照頁面dismiss掉的話就會出現crash。
修復
調用相機時,使用自定義相機類,繼承UIImagePickerController,並添加以下方法。
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self clearZoomSliderDelegateForClass:[self sliderClass] subviews:self.view.subviews];
}
- (void)clearZoomSliderDelegateForClass:(Class)sliderClass subviews:(NSArray *)subviews {
for (UIView *subview in subviews) {
if ([subview isKindOfClass:sliderClass] && [subview respondsToSelector:@selector(setDelegate:)]) {
[subview performSelector:@selector(setDelegate:) withObject:nil];
return;
}
else {
[self clearZoomSliderDelegateForClass:sliderClass subviews:subview.subviews];
}
}
}
- (Class)sliderClass {
for (NSString* prefix in @[@"CAM", @"CMK"]) {
Class zoomClass = NSClassFromString([prefix stringByAppendingString:@"ZoomSlider"]);
if (zoomClass != Nil) {
return zoomClass;
}
}
return Nil;
}
參考鏈接
https://www.jianshu.com/p/6faf869de8bc
https://stackoverflow.com/questions/26844432/how-to-find-out-what-causes-a-didhidezoomslider-error-on-ios-8/29959695