在iOS9.0中拍照雙指捏合crash

問題

在拍照頁面中雙指捏合後會出現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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章