removeFromSuperview() 耗时过长

Posted

技术标签:

【中文标题】removeFromSuperview() 耗时过长【英文标题】:removeFromSuperview() takes too long 【发布时间】:2015-08-19 12:16:15 【问题描述】:

在使用 imagePickerController 选择图像后,我尝试使用 Core Data 从 ViewController.swift 中保存一个对象。我在保存时显示一个带有微调器的视图(DynamicView)。对象在 1 或 2 秒内保存,但 DynamicView 需要 7 或 8 秒才能从 superView 中删除。

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject])
    dismissViewControllerAnimated(true, completion: nil)
    picture = info[UIImagePickerControllerOriginalImage] as? UIImage
    view.addSubview(DynamicView)
    var newImageData = UIImageJPEGRepresentation(picture, 1)
    objectToSave?.photo = newImageData
    progressBarDisplayer("test", true)
    dispatch_async(dispatch_get_global_queue(
        Int(QOS_CLASS_USER_INTERACTIVE.value), 0)) 
            self.save()
    


func save() 
    var error : NSError?
    if(!managedObjectContext!.save(&error) ) 
        println(error?.localizedDescription)
    else
        println("No error, saved")
        self.DynamicView.removeFromSuperview()


    
    NSNotificationCenter.defaultCenter().postNotificationName("load", object: nil)
 

【问题讨论】:

【参考方案1】:

从主线程调用 removeFromSuperview() 以确保您的 UI 是同步的:

func save() 
    var error : NSError?
    if(!managedObjectContext!.save(&error) ) 
        println(error?.localizedDescription)
    else
        println("No error, saved")
        dispatch_async(dispatch_get_main_queue(),            
            self.DynamicView.removeFromSuperview()
        


    
    NSNotificationCenter.defaultCenter().postNotificationName("load", object: nil)

【讨论】:

以上是关于removeFromSuperview() 耗时过长的主要内容,如果未能解决你的问题,请参考以下文章

removeFromSuperview 随机崩溃

removeFromSuperview() 并不总是有效

无法使用 removeFromSuperview 方法删除视图

关于removeFromSuperview

removeFromSuperview 无法正常工作

UIView 子类中的 self.removeFromSuperview()