AVCam を使用するアプリケーションに問題があります。アプリケーションが写真を撮影し、ロールに保存します。アプリを開くと、写真が完璧に撮られ、本来の方法で保存されます。ただし、そのView Controllerを離れて別のView Controllerに移動してから戻ると、90度回転した通常の縦長の画像が保存されます。確かに非常に奇妙な活動。
たくさんの髪の毛を引っ張った後、おそらく私はあまりにも多くのセッションを実行しようとしていると思ったので、viewdidload と viewdiddisappear でセッションを終了するようにします:
-(void)viewDidUnload{
if([[self captureManager] session ]){
[[[self captureManager] session] stopRunning];
self.captureManager = nil;
}
}
-(void)viewDidDisappear:(BOOL)animated{
if([[self captureManager] session ]&&rollCancel==NO){
[[[self captureManager] session] stopRunning];
self.captureManager = nil;
}
}
まだ動作していません。離れた後も正しく保存されません。
ビューを次のように変更します: -(void)openMenu{
MenuViewController * vc = [[MenuViewController alloc] initWithNibName:@"MenuViewController" bundle:nil]; [self presentModalViewController:vc animation:YES]; [自己却下ViewControllerAnimated:NO完了:nil]; }
また試しました:
-(void)openMenu{
[self dismissViewControllerAnimated:NO completion:^{
MenuViewController * vc = [[MenuViewController alloc] initWithNibName:@"MenuViewController" bundle:nil];
[self presentModalViewController:vc animated:YES];
[self dismissViewControllerAnimated:NO completion:nil];
}];
}
アークで実行しているため、リリースする必要はありません。これもうまくいきませんでした。このオプションで画面を変更することさえできませんでした。そのため、ビュー コントローラーを離れた後もアクションが動作し続けるかどうかを確認するタイマーを追加しました。
updateTimer = [NSTimer timerWithTimeInterval: 5.0
target: self selector: @selector(autoTimer)
userInfo: nil repeats: YES];
[[NSRunLoop mainRunLoop] addTimer: updateTimer forMode: NSDefaultRunLoopMode];
-(void)autoTimer{
NSLog(@"blablabla");
}
当然のことながら、View Controller を離れた後も blablabla がコンソールに出力され続けます。行ったり来たりすると、新しい繰り返しタイマーが作成され続け、コンソールログがスパムになります。
これは、画面に戻った後にアプリケーションが正しく保存されないことに関係しているに違いありません。つまり、presentmodalviewcontroller を実行しても、実際には実行中のすべてが削除されるわけではありません。
他の誰かがこのような同様の問題に遭遇したことがありますか、またはビューコントローラーを切り替えるときに実際にビューコントローラーをクリアする方法を知っていますか?