添加的子视图在延迟后显示

Added subview is showing after a delay

我有一个名为 loadMainView() 的函数,它是从 viewDidLoad() 调用的,如下所示

func loadMainView() {

        masterView = UIView(frame: CGRectMake(0,0,self.bgScrollView!.contentSize.width,self.bgScrollView!.contentSize.height))
        masterView!.backgroundColor = UIColor.clearColor()
        bgScrollView!.addSubview(masterView!)

        backgroundImage = UIImageView(frame: self.masterView!.bounds)
        backgroundImage!.image = UIImage(named: self.backgroundImageName!)
        self.masterView!.addSubview(backgroundImage!)

        Common.sharedCommon.postRequestAndHadleResponse(kAllowedPaths.kPathGetAllNotes, body: nil) { (result, response) -> Void in

            if (result == true) {

                let respData = response.objectForKey("data")
                self.notesDataList = respData! as! Array<Dictionary<String, AnyObject>>
                self.showExisting()

            }
        }

    }

在 loadMainView() 函数中,我进行异步 HTTP 调用以获取数据源,加载数据源后,我将调用另一个名为 showExisting() 的函数,其函数体如下所示

func showExistingNotes() {


        let xPoint = 100
        var yPoint = 100

        let printNote = notesDataList[0]
        let noteText = printNote["noteText"] as! String
        let noteTextFont = printNote["noteTextFont"] as! String
        let noteTextFontSize = printNote["noteTextFontSize"] as! CGFloat
        let noteType = printNote["noteType"] as! String


        let dim = 40.0
        let note = WallNote(frame: CGRectMake(xPoint,yPoint,dim,dim), noteType:noteType, noteText: noteText, noteFont:noteTextFont, noteFontSize:noteTextFontSize, noteFontColor:kDefaultFontColor)
        note.wallnoteDelegate = self
        //print("subview added")
        self.masterView!.addSubview(note)

    }

如您所见,我在此函数中所做的只是向 "masterView" 添加一个名为 "note" 的子视图。代码工作正常,但子视图 "note" 在延迟 10 或 15 秒后显示在屏幕上。

我尝试添加一条打印语句 print("subview added") 以查看是否需要一些时间才能到达该语句,但是一旦数据源填充到 loadMainView() 函数中就会调用打印语句打印语句后添加的子视图在打印语句后 10 或 15 秒后显示。

我无法理解为什么我在显示子视图时出现这种延迟。

谢谢

因为它是异步任务,所以它在后台线程中执行,所有 ui 更新都必须在主线程中发生。因此,您必须在主线程中显式调用 ui 更新。试试下面的代码

dispatch_async(dispatch_get_main_queue()) {
     if (result == true) {
        let respData = response.objectForKey("data")
        self.notesDataList = respData! as! Array<Dictionary<String, AnyObject>>
        self.showExisting()
    }
}