
self.webVIEw = WKWebVIEw(frame: frame,configuration: WKWebVIEwConfiguration())self.externVIEw = UIVIEw(frame: frame)self.externWebVIEw = WKWebVIEw(frame: subFrame,configuration: WKWebVIEwConfiguration())let StackVIEw = UIStackVIEw(frame: frame)self.externVIEw?.addSubvIEw(StackVIEw)self.externVIEw?.backgroundcolor = UIcolor.blackcolor()vIEw.addSubvIEw(self.webVIEw!)self.externVIEw?.hIDden = trueStackVIEw.addSubvIEw(self.externWebVIEw!)vIEw.addSubvIEw(self.externVIEw!)
这创建了我想要的初始设置,这允许1个Web视图作为主要视图,可以启动,外部渲染其他内容,最初是隐藏的.
我遇到的问题是来自我正在调用的工作线程
WKExteralLoader.externVIEw!.hIDden = false;WKExteralLoader.webVIEw!.hIDden = true;
这可能需要30秒才能生效;然而,它的逆几乎是瞬间的.
WKExteralLoader.webVIEw!.hIDden = false;WKExteralLoader.externVIEw!.hIDden = true;
什么可能导致这个问题?
谢谢!
解决方法 @MobileMon告诉你如何解决你的问题,但不是为什么.UIKit不是线程安全的,这意味着必须从主线程进行所有UIKit调用.设置视图的隐藏标志是UIKit调用,因此需要从主线程完成.
如果从后台线程 *** 作UIVIEw对象,则结果未定义.大多数情况下,结果是变更生效需要很长时间(你所看到的),但有时变化根本不会发生,有时结果是奇怪的视觉效果,有时你的应用程序会崩溃.
每当你从后台线程 *** 作一个UIVIEw对象时,你需要将它包装在对dispatch_async(dispatch_get_main_queue())的调用中,就像在MobileMon的回答中一样(或者其他一些导致代码从主线程运行的方法,但这是首选方式.)
编辑:
要说清楚,你说:
The problem I’m running into,is that from a worker thread I’m calling
WKExteralLoader.externVIEw!.hIDden = false;
WKExteralLoader.webVIEw!.hIDden = true;
您无法从工作线程执行UI代码.相反,你需要像这样编写代码:
dispatch_async(dispatch_get_main_queue(),^{ WKExteralLoader.externVIEw!.hIDden = false; WKExteralLoader.webVIEw!.hIDden = true;}); 这样,从您的工作线程中,您将UI代码发送回主线程.
当您不知道它时,您可能有其他代码尝试从后台线程执行UIKit调用.要检查,请添加以下行:
print("isMainThread = \(Thread.current.isMainThread)") 然后检查控制台中的打印内容.
总结以上是内存溢出为你收集整理的ios – 显示隐藏的视图真的很慢全部内容,希望文章能够帮你解决ios – 显示隐藏的视图真的很慢所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)