延迟后显示添加的子视图

时间:2016-02-10 17:41:23

标签: ios iphone swift uiview subview

我有一个名为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语句print(“subview added”)来查看是否需要一些时间来访问该语句,但是只要在loadMainView()函数中填充了数据源并且添加了该语句,就会调用print语句print语句后的子视图在打印语句后10或15秒后显示。

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

由于

1 个答案:

答案 0 :(得分:2)

由于它是异步任务,因此它在后台线程中执行,所有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()
    }
}