一同养成写作习惯!这是我参加「日新计划 4 月更文应战」的第14天,点击检查活动概况。

前语

需求:将当时的VC的界面作为另一个VC的布景图片(在当时视图中推出别的一个布景透明的视图控制器)

the content is displayed over another view controller’s content 具体的使用场景:

  1. 下单的的付款概况

  2. 发布产品的挑选产品类目

  3. 反应页面

  4. 码牌类设备(含电子立牌、静态码牌、码牌喇叭一体机)添加收款二维码检查和下载功能

    iOS小技能: VC modal样式的应用(将当前的VC的界面作为另一个VC的背景图片)
    下单的的付款概况这个界面属于独立的付出插件

完成思路:

  1. 使用体系自带的modal款式:UIModalPresentationOverCurrentContext - A presentation style where the content is displayed over another view controller’s content

  2. 截取当时屏幕

I 、完成计划

推荐使用体系自带的modal款式完成需求,由于功能更好,完成也简略

1.1 使用体系自带的modal款式

设置modalPresentationStyle为UIModalPresentationOverCurrentContext,并设置蒙版色彩

    CategoryViewController *tmp = [CategoryViewController new];
    tmp.modalPresentationStyle = UIModalPresentationOverCurrentContext;
        //设置蒙版色彩
    [tmp view].backgroundColor = STModalWindowDefaultBackgroundColor;
   [self.navigationController presentViewController:tmp animated:YES completion:^{
    }];

子视图布景色彩可根据需要为clearColor,或许其他色彩。

- (void)viewDidLoad {
    [super viewDidLoad];
    //设置VCView布景色彩为clearColor
    [self vcView].backgroundColor =[UIColor clearColor] ;
}

设置点击蒙版回到上个界面

设置tableView的点击事情优先级,低于cell的选中事情以及按钮的点击事情UIControlEventTouchUpInside


- (CRMSelectedWechantActivityTypeV    *)vcView{
    if (!_vcView) {
        CRMSelectedWechantActivityTypeV *tmp = [[CRMSelectedWechantActivityTypeV   alloc] initWithViewModel:self.viewModel];
        _vcView= tmp;
        __weak __typeof__(self) weakSelf = self;
        [self.view addSubview:tmp];
        [tmp mas_makeConstraints:^(MASConstraintMaker *make) {
            CGFloat CategoriesH =1*(142+12);
            make.height.mas_equalTo(kAdjustRatio(78+CategoriesH+90));
            make.left.equalTo(weakSelf.view).offset(kAdjustRatio(0));
            make.bottom.equalTo(weakSelf.view);
            make.right.equalTo(weakSelf.view).offset(-kAdjustRatio(0));
// 设置子视图约束(高度)
make.height.equalTo(weakSelf.view).multipliedBy(0.45).offset(kAdjustRatio(self.viewModel.selectedplatProductCategories.count*50+50));
        }];
        UITapGestureRecognizer *cutTap = [[UITapGestureRecognizer alloc] init];
        [[cutTap rac_gestureSignal] subscribeNext:^(id x) {
            [weakSelf dismissViewControllerAnimated:YES completion:nil];            
        }];
        [weakSelf.view addGestureRecognizer:cutTap];
                UITapGestureRecognizer *cutTap1 = [[UITapGestureRecognizer alloc] init];
                [[cutTap1 rac_gestureSignal] subscribeNext:^(id x) {
                    NSLog(@" 设置tableView的点击事情优先级,低于cell的选中事情  ");
                }];
                        cutTap1.cancelsTouchesInView = NO;// 设置tableView的点击事情优先级,低于cell的选中事情
                [tmp.tableView addGestureRecognizer:cutTap1];
    }
    return _vcView;
}

效果:发布产品的挑选产品类目

iOS小技能: VC modal样式的应用(将当前的VC的界面作为另一个VC的背景图片)
下载地址:download.csdn.net/download/u0…

文章地址:kunnan.blog.csdn.net/article/det…

视频地址:live.csdn.net/v/167208

产品运营类目挑选视图的使用场景: 1、发布产品时挑选产品类目 2、商户进件挑选运营类目 3、购物类app下单界面的产品类目筛选

你可以使用运转API进行全局控制modal的款式

从CSDN资源下载完整demo源码:download.csdn.net/download/u0… 灵活控制模态展示的视图款式的文章:blog.csdn.net/z929118967/… 更多内容请重视大众号:iOS逆向


- (NSMutableArray *)OverCurrentContextClasss{
    if(_OverCurrentContextClasss == nil){
        _OverCurrentContextClasss = [NSMutableArray array];
        //.. 发布产品- 挑选产品类目
        [_OverCurrentContextClasss addObject:@"ERPSelect_commodity_categoryViewController"];
        // 图片浏览器
        [_OverCurrentContextClasss addObject:@"KNImageBrowserViewController"];
        // 挑选微信活动
        [_OverCurrentContextClasss addObject:@"CRMSelectedWechantActivityTypeVC"];
    }
    return _OverCurrentContextClasss;
}

1.2 截取当时视图

反应页面主动生成截图

留意:截图在弹反应页面之前create 【原理文章】(https://kunnan.blog.csdn.net/article/details/113444297)

iOS小技能: VC modal样式的应用(将当前的VC的界面作为另一个VC的背景图片)
iOS小技能: VC modal样式的应用(将当前的VC的界面作为另一个VC的背景图片)

1.3 关于dismiss的使用总结

使用1:自定义WebViewController,使用完相册之后导致WebView 所在的控制器也被干掉的问题

  1. 问题:苹果的一个特性。当模态出N个ViewController之后,只需要dismiss恣意一个,都会dismiss它之后的所有模态试图 ,因此会导致modal模态出来的UIViewController中WebView的H5弹出Camera/ImagePicker 时,当UIDocumentMenuViewController消失的时分会导致WebView 所在的控制器也被干掉。

  2. 处理思路 所以使dismissViewControllerAnimated调用一次,或许让UIDocumentMenuViewController找不到presentingViewController即可。

  3. 获取demo源码,请重视大众号:iOS逆向 github.com/zhangkn/KNU…

使用2:想要一次性把模态出来的所有ViewController dismiss,只需要使用presentingViewController进行dismiss即可

    [t setDissblock:^(id  _Nonnull sender) {
        [weakSelf.presentingViewController dismissViewControllerAnimated:YES completion:nil];
    }];

II 前置小常识

2.1 二维码生成

使用原生API封装库 pod 'LBXScan/LBXNative','~> 2.5'

    self.iconV.image  =    [LBXScanNative createQRWithString:models.content4code QRSize:CGSizeMake(kAdjustRatio(180), kAdjustRatio(180))];

2.2 保存图片到相册

blog.csdn.net/z929118967/…

  1. 需求: 码牌类设备(含电子立牌、静态码牌、码牌喇叭一体机)添加收款二维码检查和下载功能

iOS小技能: VC modal样式的应用(将当前的VC的界面作为另一个VC的背景图片)

  1. 视图与保存的图片宽高的关系:视图的宽度与屏幕的宽度越挨近,图片越明晰。

保存的视图的宽,假如是和屏幕的宽共同,则是1:1的关系保存。

假如保存的视图的宽<屏幕的宽,则图片是以屏幕的宽进行放大保存,但是终究保存的图片的宽会等于屏幕的宽。

  1. 添加权限:
	<key>NSPhotoLibraryAddUsageDescription</key>
	<string>需要拜访您的相册,用于收款码图片的下载</string>
	<key>NSPhotoLibraryUsageDescription</key>
	<string>App会在自定义会员的时分使用您的相册权限</string>

假如没添加对应的错误信息

#366012 SIGABRT
libsystem_kernel.dylib ___abort_with_payload

see also

git 代码分支办理教程

mp.weixin.qq.com/s/-63si1cRx…