美文网首页
按Home键后,再回到应用时动画停止

按Home键后,再回到应用时动画停止

作者: KardelShaw | 来源:发表于2017-03-03 15:12 被阅读0次

发现这个问题的背景是,当时在做一个识别扫描二维码的功能。在扫码界面按Home键退出来再回到应用,扫码动画就消失了。

至于什么是扫码动画,大家打开微信的扫描二维码就知道了,实际上就是一个细条状的图片在扫码区域内从上到下移动,不断循环。

分析思路:
1、我在扫码的试图控制器中实现了viewDidAppear:方法,按完Home键回到应用不是应该会调用viewDidAppear:方法吗?

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [self authorizationStatus];
}

- (void)authorizationStatus {
    AVAuthorizationStatus status = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
    if (status == AVAuthorizationStatusAuthorized) {
        [self.readView startScan];
    } else {
       [self.readView stopScan];
       UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"Error" message:@"请检查是否开启相机权限" preferredStyle:UIAlertControllerStyleAlert];
       UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil];
       [alertVC addAction: okAction];
        
       [self presentViewController:alertVC animated:true completion:nil];
    }
}

2、为了验证这种想法,我加入了2条输出NSLog语句

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [self authorizationStatus];
    NSLog(@"appear");
}

- (void)authorizationStatus {
    AVAuthorizationStatus status = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
    if (status == AVAuthorizationStatusAuthorized) {
        [self.readView startScan];
        NSLog(@"status");
    } else {
        [self.readView stopScan];
        UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"Error" message:@"请检查是否开启相机权限" preferredStyle:UIAlertControllerStyleAlert];
        UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil];
        [alertVC addAction: okAction];
        
        [self presentViewController:alertVC animated:true completion:nil];
    }
}

实践证明,回到应用时,根本没有调用viewDidAppear:方法,不过是我自作多情。

3、既然系统不会自动调用,那就由我手动调用吧,在viewDidLoad:方法中添加通知:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(viewDidAppear:) name:UIApplicationWillEnterForegroundNotification object:nil];

</br>

相关资料链接:

1、为什么viewDidAppear不调用
2、CABasicAnimation 按home键后台之后,再切回来动画就停止了
3、iOS CAlayer 动画进入后台或者 调用viewWillDisappear viewDidDisappear后动画暂停问题的解决办法

相关文章

网友评论

      本文标题:按Home键后,再回到应用时动画停止

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