添加的子视图在延迟后显示
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()
}
}
我有一个名为 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()
}
}