0

バックカメラからのライブビューのサブビューがあります。カメラを前面に切り替えると、アニメーションが表示されます。アニメーションとトグルを同期できなかったので、無地の黒い背景の別のビューで覆いました。トグルは遅いので、トグルを実行した後に黒いサブビューを削除したいと考えています。でもやると消えない。デバッガーには、入力したすべての NSLog が表示され、どこかにブレークポイントを配置するとデバッガーも停止するため、コードに到達できます。しかし、UIView単に変更されておらず、黒いサブビューを保持しています。

興味深い事実:上部のボタンでディスプレイをオフにしてから再びオンにすると、黒いビューはなくなりました!

コード:

- (IBAction)cameraChanged:(id)sender {
NSLog(@"Camera changed");
UIView *animView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.videoPreviewView.frame.size.width, self.videoPreviewView.frame.size.height)];
animView.tag = 42;
[animView setBackgroundColor:[UIColor blackColor]];

[UIView transitionWithView:self.videoPreviewView duration:1.0
                    options:self.animate ? UIViewAnimationOptionTransitionFlipFromLeft:UIViewAnimationOptionTransitionFlipFromRight
                animations:^{
                    [self.videoPreviewView addSubview:animView];
                    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul), ^{
                        [self.captureManager toggleCamera];
                        NSLog(@"Done toggling");
                        [self done];
                    });
                }
                completion:^(BOOL finished){
                    if (finished) {
                        //
                    }
                }];
self.animate = !self.animate;
}

- (void)done {
for (UIView *subview in [self.videoPreviewView subviews]) {
    NSLog(@"In for");
    if (subview.tag == 42) {
        NSLog(@"removing");
        [subview removeFromSuperview];
    }
}
}

なぜこれが起こっているのか、それを解決する方法を知っている人はいますか?

4

1 に答える 1