在展开 segue 之前做一些事情 (swift)
Do something BEFORE unwind segue (swift)
我有一个 unwind segue,它返回到以前的控制器并将图像保存到 PHAsset 库。展开 segue 有效,保存有效,唯一的问题是它在图像保存之前展开。因此,图像不会呈现在展开的视图控制器上,因为视图控制器是在保存图片之前呈现的(保存图像需要一点时间,而它会返回到视图控制器非常快)。我想知道是否有任何方法可以仅在保存照片后而不是立即放松到以前的控制器。
这是我的代码:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "savePicture" {
//Image to be saved
let newImage = self.appraisalPic.image
//Store picture to PHAssets
let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
dispatch_async(dispatch_get_global_queue(priority, 0), {
PHPhotoLibrary.sharedPhotoLibrary().performChanges({
let createAssetRequest = PHAssetChangeRequest.creationRequestForAssetFromImage(newImage)
let assetPlaceholder = createAssetRequest.placeholderForCreatedAsset
let albumChangeRequest = PHAssetCollectionChangeRequest(forAssetCollection: self.assetCollection, assets: self.photosAsset)
albumChangeRequest.addAssets([assetPlaceholder])
}, completionHandler: {(success, error)in
dispatch_async(dispatch_get_main_queue(), {
NSLog("Adding Image to Library -> %@", (success ? "Success":"Error!"))
//Need code here which doesn't do segue until AFTER picture is saved
})
})
})
}
}
这个表达式:dispatch_async(dispatch_get_global_queue(priority, 0)
将在后台执行所有操作(直到您在主队列上再次明确执行某些操作)。
简单地消除所有 dispatch_async
调用以在主线程上完成所有工作。如果花费的时间太长,请通知用户,让他知道在 unwind segue 触发之前等待的时间很短。
我有一个 unwind segue,它返回到以前的控制器并将图像保存到 PHAsset 库。展开 segue 有效,保存有效,唯一的问题是它在图像保存之前展开。因此,图像不会呈现在展开的视图控制器上,因为视图控制器是在保存图片之前呈现的(保存图像需要一点时间,而它会返回到视图控制器非常快)。我想知道是否有任何方法可以仅在保存照片后而不是立即放松到以前的控制器。
这是我的代码:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "savePicture" {
//Image to be saved
let newImage = self.appraisalPic.image
//Store picture to PHAssets
let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
dispatch_async(dispatch_get_global_queue(priority, 0), {
PHPhotoLibrary.sharedPhotoLibrary().performChanges({
let createAssetRequest = PHAssetChangeRequest.creationRequestForAssetFromImage(newImage)
let assetPlaceholder = createAssetRequest.placeholderForCreatedAsset
let albumChangeRequest = PHAssetCollectionChangeRequest(forAssetCollection: self.assetCollection, assets: self.photosAsset)
albumChangeRequest.addAssets([assetPlaceholder])
}, completionHandler: {(success, error)in
dispatch_async(dispatch_get_main_queue(), {
NSLog("Adding Image to Library -> %@", (success ? "Success":"Error!"))
//Need code here which doesn't do segue until AFTER picture is saved
})
})
})
}
}
这个表达式:dispatch_async(dispatch_get_global_queue(priority, 0)
将在后台执行所有操作(直到您在主队列上再次明确执行某些操作)。
简单地消除所有 dispatch_async
调用以在主线程上完成所有工作。如果花费的时间太长,请通知用户,让他知道在 unwind segue 触发之前等待的时间很短。