バックカメラからのライブビューのサブビューがあります。カメラを前面に切り替えると、アニメーションが表示されます。アニメーションとトグルを同期できなかったので、無地の黒い背景の別のビューで覆いました。トグルは遅いので、トグルを実行した後に黒いサブビューを削除したいと考えています。でもやると消えない。デバッガーには、入力したすべての 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];
}
}
}
なぜこれが起こっているのか、それを解決する方法を知っている人はいますか?