我有一个名为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秒后显示。
我无法理解为什么我在显示子视图时遇到这种延迟。
由于
答案 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()
}
}