• 截取UIImagePickerController的拍照事件


    前言 :

        iOS拍照可以用AVCaptureSession和UIImagePickerController来实现,两者都可以自定义拍照界面,UIImagePickerController有iOS原生的拍照界面,用起来很简单,但是有时候回需要在拍照界面加点文字说明,边框之类的修饰views,在用户点击拍照按钮后,隐藏这些修饰views。

     在调起UIImagePickerController 来拍照的时候,如下图,添加了拍摄边框和文字说明


    解决方案:

    在模态推出UIImagePickerController的时候,viewController遵循UINavigationControllerDelegate, 会走这个代理方法

    - (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{

    //里面能获取到视图的层级关系

    viewController就是 CAMImagePickerCameraViewController

    }

    此时查看图层关系

    拍照按钮在CAMBottomBar上

    重拍按钮在PLCropOverlayPreviewBottomBar,而PLCropOverlayPreviewBottomBar又在PLCropOverlayBottomBar

    思路 : 找到拍照按钮和重拍按钮,给两个按钮添加事件。

    代码:

    - (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{

        for (UIView *tmpView in viewController.view.subviews) {

            NSLog(@"tmpView.subviews_%@", tmpView.subviews);

            NSArray *tmpViewSubviews = tmpView.subviews;

            [tmpViewSubviews enumerateObjectsUsingBlock:^(UIView   * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {

                if ([[[obj class]description]isEqualToString:@"CAMBottomBar"]) {

                    for (UIView *tmpView3 in obj.subviews) {

                        NSLog(@"CAMBottomBar.subviews_%@", obj.subviews);

                        if ( [[[tmpView3 class]description]isEqualToString:@"CUShutterButton"]) {

                            //拍照按钮

                            UIButton *shutButton = (UIButton *)tmpView3;

                            @weakify(self);

                            [[shutButton rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x) {

                                @strongify(self);

                                self.horizontalScreenPromptsView.hidden = YES;

                                self.promptslabel.text = @"";

                            }];

                            break;

                        }

                    }

                }

                if ([[[obj class]description]isEqualToString:@"PLCropOverlayBottomBar"]) {

                    for (UIView *tmpView3 in obj.subviews) {

                        NSLog(@"PLCropOverlayBottomBar%@", obj.subviews);

                        if ( [[[tmpView3 class]description]isEqualToString:@"PLCropOverlayPreviewBottomBar"]) {

                            for (UIView *tmpView4 in tmpView3.subviews) {

                                NSLog(@"PLCropOverlayPreviewBottomBar%@", tmpView4.subviews);

                               //重拍按钮

                                if ( [[[tmpView4 class]description]isEqualToString:@"UIButton"]) {

                                    UIButton *recameraButton = (UIButton *)tmpView4;

                                    @weakify(self);

                                    [[recameraButton rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x) {

                                        @strongify(self);

                                            self.horizontalScreenPromptsView.hidden = NO;

                                            self.promptslabel.text =@"请将手机横置拍摄";

                                    }];

                                    break;

                                }

                            }

                            break;

                        }

                    }

                }

            }];

    }

    结束

  • 相关阅读:
    Solution: Win 10 和 Ubuntu 16.04 LTS双系统, Win 10 不能从grub启动
    在Ubuntu上如何往fcitx里添加输入法
    LaTeX 笔记---Q&A
    Hong Kong Regional Online Preliminary 2016 C. Classrooms
    Codeforces 711E ZS and The Birthday Paradox
    poj 2342 anniversary party
    poj 1088 滑雪
    poj 2479 maximum sum
    poj 2481 cows
    poj 2352 stars
  • 原文地址:https://www.cnblogs.com/pengjuwang/p/8875672.html
Copyright © 2020-2023  润新知