我想通过使用while循环每2秒拍摄一张照片。但是当我尝试这个屏幕冻结。
这是取照片的功能:为什么iPhone在swift中使用while循环时似乎会冻结?
func didPressTakePhoto(){
if let videoConnection = stillImageOutput?.connectionWithMediaType(AVMediaTypeVideo){
videoConnection.videoOrientation = AVCaptureVideoOrientation.Portrait
stillImageOutput?.captureStillImageAsynchronouslyFromConnection(videoConnection, completionHandler: {
(sampleBuffer, error) in
if sampleBuffer != nil {
let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(sampleBuffer)
let dataProvider = CGDataProviderCreateWithCFData(imageData)
let cgImageRef = CGImageCreateWithJPEGDataProvider(dataProvider, nil, true, .RenderingIntentDefault)
let image = UIImage(CGImage: cgImageRef!, scale: 1.0, orientation: UIImageOrientation.Right)
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
//Adds every image taken to an array each time the while loop loops which will then be used to create a timelapse.
self.images.append(image)
}
})
}
}
拍照时我有一个按钮时调用计数变量等于0,这将使用此功能在while循环,但是当结束按钮被按下时,这个变量等于1,所以while循环结束。
这是startPictureButton动作的样子:
@IBAction func TakeScreanshotClick(sender: AnyObject) {
TipsView.hidden = true
XBtnTips.hidden = true
self.takePictureBtn.hidden = true
self.stopBtn.hidden = false
controls.hidden = true
ExitBtn.hidden = true
PressedLbl.text = "Started"
print("started")
while count == 0{
didPressTakePhoto()
print(images)
pressed = pressed + 1
PressedLbl.text = "\(pressed)"
print(pressed)
sleep(2)
}
}
但是当我运行这一点,并开始延时屏幕看起来冻结。
有谁知道如何停止发生冻结 - 但也要将每个图像添加到数组 - 以便我可以把它变成一个视频?
谢谢,我将如何在我的程序中实现这一点? –
@AndrewHarris,不幸的是写了很长时间(考虑到操作取消应该被照顾),而且我现在没有太多时间。可能是别人会这样做的。不过,如果您搜索有关异步界面的信息,则应该可以实现它。 – FreeNickname
谢谢,我做了一些研究,发现这一点,但我不完全理解它,但它的工作部分, - dispatch_async(dispatch_get_main_queue()){}并让优先级= DISPATCH_QUEUE_PRIORITY_DEFAULT; dispatch_async(dispatch_get_global_queue(priority,0)){//做一些任务dispatch_async(dispatch_get_main_queue()){//更新一些UI}}这似乎在做诡计 –