0
我在會話期間在ARKit中創建視頻。當我按下錄製按鈕時,相機凍結。我已經在導致問題的didUpdateFrame委託中編寫代碼。在那裏我將scene.snapshot保存在一個數組中。此外,當我從這些圖像,應用程序崩潰與下面的消息在調試器創建視頻:從調試 消息:由於終止內存問題在didUpdateFrame方法中保存ARSCNView快照導致相機凍結
-(void)session:(ARSession *)session didUpdateFrame:(ARFrame *)frame
{
if (_recordButton.state == UIControlStateSelected)
{
currentState = Recording;
[self saveImage];
}
else if (previousState == Recording)
{
NSLog(@"Stop recording");
currentState = NotRecording;
recordTime = NULL;
self.nextButton.enabled=YES;
}
//update recording state per frame update
previousState = currentState;
}
-(void)saveImage
{
UIImage *image = self.sceneView.snapshot;
[self.bufferArray addObject:image];
image = nil;
}
暫停'didUpdateFrame'內的調試器並檢查堆棧跟蹤 - 您很有可能進入視圖的渲染循環,因此如果啓動快照,您可能會踢出另一個渲染器,這會調用您的'didUpdateFrame',等等,直到你由於無限遞歸而崩潰。最簡單的解決方案可能是將快照分派到主隊列中。 – rickster
我檢查了派遣異步也沒有發生。 dispatch_async(dispatch_get_main_queue(),^ { 的UIImage *圖像= self.sceneView.snapshot; 的NSData * compressImageData = UIImageJPEGRepresentation(圖像,0.02); 的UIImage * compessImage = [UIImage的imageWithData:compressImageData]; [自我。 bufferArray addObject:compessImage]; compessImage = nil; image = nil; }); – Mudassir