美文网首页
项目中遇到的问题

项目中遇到的问题

作者: 扶兮摇兮 | 来源:发表于2020-04-15 19:33 被阅读0次

1.iOS中,延时调用不会因为对象的销毁而失效,如果不作取消处理,可能会造成程序功能混乱。

2.在接收到新聊天消息,并且滚动到底部过程中,会出现闪动的问题,这是因为在iOS11后,系统默认会有预估高度导致的,解决办法是让系统的预估高度设置为0。

 if (@available(iOS 11.0, *)) {

        _palmistryAnalyzeTableView.estimatedRowHeight = 0;

        _palmistryAnalyzeTableView.estimatedSectionFooterHeight = 0;

        _palmistryAnalyzeTableView.estimatedSectionHeaderHeight = 0;
    }

3.关于根据周围环境光照亮度开始闪光灯问题:是在已有的会话基础上在增加一个AVCaptureVideoDataOutput输出对象,通过代理回调,拿到光照亮度系数去做处理。

- (AVCaptureVideoDataOutput *)videoDataOutput{

    if(!_videoDataOutput) {

        _videoDataOutput = [[AVCaptureVideoDataOutput alloc] init];

        [_videoDataOutput setSampleBufferDelegate:self queue:dispatch_get_main_queue()];

    }
    return _videoDataOutput;
}

// 添加监测环境光线变化的输出

    if ([self.captureSession canAddOutput:self.videoDataOutput]) {
       [self.captureSession addOutput:self.videoDataOutput];
   } 
#pragma mark -   代理AVCaptureVideoDataOutputSampleBufferDelegate - 
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection {

    CFDictionaryRef metadataDict = CMCopyDictionaryOfAttachments(**NULL**, sampleBuffer, kCMAttachmentMode_ShouldPropagate);

    NSDictionary *metadata = [[NSMutableDictionary alloc] initWithDictionary:(__bridge NSDictionary*)metadataDict];

    CFRelease(metadataDict);

    NSDictionary *exifMetadata = [[metadata objectForKey:(NSString *)kCGImagePropertyExifDictionary] mutableCopy];

    float brightnessValue = [[exifMetadata objectForKey:(NSString *)kCGImagePropertyExifBrightnessValue] floatValue];

// #define brightnessThresholdValue (-0.2) //亮度阈值

    if (brightnessValue < brightnessThresholdValue) {

        dispatch_async(dispatch_get_main_queue(), ^{

            self.flashButton.hidden = NO;
            self.flashPremptLabel.hidden = NO;
        });
    }else{
        dispatch_async(dispatch_get_main_queue(), ^{

            self.flashButton.hidden = YES;
            self.flashPremptLabel.hidden = YES;
        });
    }
}

4.关于监听系统授权弹窗跳转的应用设置页

- (void)cameraLimitCheckToAlert{

    AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
    if(authStatus == AVAuthorizationStatusNotDetermined) {
        // 申请权限
        [SRStatisticsManager permissionsS];
  [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) {
            dispatch_async(dispatch_get_main_queue(), ^{
                if(granted) {
                    self.flashButton.hidden = NO;
                    self.flashPremptLabel.hidden = NO;
                    [SRStatisticsManager permissionsC:@"OK"];
                }else{
                    [self showPermissionTipsAlert];
                    [SRStatisticsManager permissionsC:@"cancel"];
                }
           });
        }];
        return;
    }

     if(authStatus == AVAuthorizationStatusRestricted || authStatus ==AVAuthorizationStatusDenied) {
        //无权限 可以做一个友好的提示
         [self showPermissionTipsAlert];
         return;
     }
    if(authStatus == AVAuthorizationStatusAuthorized) {
        // 权限已获取
        self.flashButton.hidden = NO;
        self.flashPremptLabel.hidden = NO;
    }
}

5.App应用类评分阻塞线程问题

- (void)goToComment{

   NSUInteger count = [[[NSUserDefaults standardUserDefaults] objectForKey:@"appInCommentCount"] integerValue];
    count++;
   [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInteger:count] forKey:@"appInCommentCount"];

    // 获取当前版本号
    NSString *currentAppVersion =  [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];

    NSString *lastAppVersion  = [[NSUserDefaults standardUserDefaults] objectForKey:@"lastAppVersion"];
    if(![currentAppVersion isEqualToString:lastAppVersion] && count <= 3) {

        // 应用内评分
        if(@available(iOS 10.3, *)) {

            CGFloat twoSecondsFromNow = DISPATCH_TIME_NOW + 2.0;
            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(twoSecondsFromNow * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

                dispatch_async(dispatch_get_main_queue(), ^{
                     [SKStoreReviewController requestReview];                 [[NSUserDefaults standardUserDefaults] setObject:currentAppVersion forKey:@"lastAppVersion"];
                });
            });

            return;
        }
    }

    NSURL *appUrl = [NSURL URLWithString:App_Write_Review_URL];
    if([[UIApplication sharedApplication] canOpenURL:appUrl]) {
        [[UIApplication sharedApplication] openURL:appUrl options:@{}completionHandler:nil];
    }

6.聊天第一次进入滚动到底部

 if(self.isScrollBottom) { //只在初始化的时候执行
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.005 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

          if(!SR_arrayIsEmpty(**self**.analyzeDataSources)) {
                NSIndexPath *indexPath = [NSIndexPath indexPathForRow:([self.palmistryAnalyzeTableViewnumberOfRowsInSection:0] - 1) inSection:0];           [self.palmistryAnalyzeTableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottomanimated:NO];
            }
        });
    } 

相关文章

  • vue2项目中遇到的问题汇总

    华为内置浏览器打不开vue2页面如何调试: 用iE浏览器的 edge版本,检查报错,一个错都不能有,全部清除报错 ...

  • 项目中遇到的问题

    mySql常用类型: int:整型 默认长度11 10位长度 double:浮点型,例如double(5,2)表...

  • 项目中遇到的问题

  • 项目中遇到的问题

    1.判断是安卓还是IOS 2.怎么渲染数据 3.子组件怎么获取子组件的属性 1.图二是在子组件上怎么接受父组件传来...

  • 项目中遇到的问题

    1. vue-cli 文件的作用 index.html 和App.vue都是指同一个页面,App.vue中是组价...

  • 项目中遇到的问题

    数据解析问题: 由于后台返回的数据是一串字符串,而不是JSON格式.所以需要我们自己处理.数据格式是这样的:key...

  • 项目中遇到的问题

    1.页面之间进行跳转后回到原始页面,页面布局整体下移64px/44px个高度? 查阅了一些资料后,说要设置这个属性...

  • 项目中遇到的问题

    dyld: Library not loaded: @rpath/Alamofire.framework/Alam...

  • 项目中遇到的问题

    1.iOS中,延时调用不会因为对象的销毁而失效,如果不作取消处理,可能会造成程序功能混乱。 2.在接收到新聊天消息...

  • 项目中遇到的问题

    将后台按月返回的数据进行分页加载 后台返回数据格式 以下是当前需求遇到的问题 请求第二页数据时 还存在当前页面加载...

网友评论

      本文标题:项目中遇到的问题

      本文链接:https://www.haomeiwen.com/subject/aljhvhtx.html