问题
在拍照页面中双指捏合后会出现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