显示隐藏视图非常慢

2023-12-08

我有这样的设置:

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 = true
StackView.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;

有什么想法可能会导致这个问题吗?

Thanks!


@MobileMon 告诉您如何解决问题,但没有告诉您原因。

UIKit 不是线程安全的,这意味着必须从主线程进行所有 UIKit 调用。设置视图的隐藏标志是 UIKit 调用,因此需要从主线程完成。

如果您从后台线程操作 UIView 对象,结果是未定义的。大多数情况下,结果是更改需要很长时间才能生效(您所看到的),但有时更改根本没有发生,有时结果是奇怪的视觉效果,有时您的应用程序会碰撞。

每当您从后台线程操作 UIView 对象时,您需要将其包装在对dispatch_async(dispatch_get_main_queue())正如 MobileMon 的回答(或者其他一些导致代码从主线程运行的方法,但这是首选方法。)

Edit:

为了清楚起见,你说:

我遇到的问题是,从我正在调用的工作线程

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)")

然后检查控制台中打印的内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

显示隐藏视图非常慢 的相关文章

  • 处理ios设备方向

    我的 uiview 遇到问题 具体取决于设备方向 我遇到的主要问题是 UIDeviceOrientationFaceUp UIDeviceOrientationFaceDown 扰乱了我的视图 我只想支持纵向和横向 左右 因此如果设备改变方
  • Core Audio 渲染线程和线程信号

    iOS 是否有任何类型的非常低级别的条件锁 不包括锁定 我正在寻找一种方法来从核心音频渲染线程内向等待线程发出信号 而不使用锁 我想知道是否可能存在像 Mach 系统调用这样的低级内容 现在我有一个核心音频线程 它使用非阻塞线程安全消息队列
  • NSMenu 未调用 validateMenuItem 或 menuWillOpen

    我的 Mac 应用程序有一个 NSMenu 其委托功能validateMenuItem and menuWillOpen从来没有被调用过 到目前为止 网上的解决方案都没有帮助 看来我做的一切都是对的 菜单项的选择器属于同一类 管理它的类继承
  • 获取添加为子视图的 UIView 的可见矩形

    如上图所示 UIView A 和 UIView C 添加到 UIView B 上 B ClipToBounds 为 YES 因此红色区域不可见 是否有可能获得 A 和 C 的可见矩形 用线条显示 当我触摸视图 A 时 我需要在可见区域显示矩
  • 除了推送收据之外,关闭 FireBase 调配还会影响分析吗?

    The Firebase 云消息传递文档 https firebase google com docs cloud messaging ios client说他们混合了一些方法来获取推送通知令牌并记录接收推送通知 在里面FIR 分析文档 h
  • 在屏幕外绘制 uiview

    我想创建一个 UIView 它在调用 ViewDidLoad 时位于屏幕外 但一旦调用某个函数 我就会将其动画显示到屏幕上 用于对 UIView 进行动画处理的代码很好 但我似乎无法从屏幕外绘制 UIView 我已将故事板中的 UIView
  • 在ios键盘上方显示建议工具栏

    我是iOS开发的新手 我正在尝试在 ios 5 1 中创建一个具有 textView 的拼写建议类型应用程序 这样如果用户点击键盘的某个键 则建议工具栏会出现在键盘顶部 其中包含所有建议 并且如果用户点击这些建议之一它将显示在 textVi
  • 在 Xcode 4.2 中启用崩溃日志符号

    我使用的是 Xcode 4 2 我的崩溃日志没有被符号化 如何在 Xcode 4 2 中启用此功能 请浏览苹果的文档 http developer apple com library ios technotes tn2151 index h
  • kCVPixelFormatType_420YpCbCr8BiPlanarFullRange 帧到 UIImage 转换

    我有一个应用程序可以捕获 kCVPixelFormatType 420YpCbCr8BiPlanarFullRange 格式的实时视频来处理 Y 通道 根据苹果的文档 kCVPixelFormatType 420YpCbCr8BiPlana
  • 继承属性,从 readonly 继承的属性中读写时不会合成 setter

    我在使用属性时发现了一个奇怪的行为 该属性被继承为只读 然后在继承的类中重新声明为读写 In A h interface A NSObject property nonatomic strong readonly NSObject some
  • 检查url图片是否存在

    我正在尝试使用 if 语句检查 url 图像是否存在 然而 当尝试通过错误的图像网址测试它时 它会不断返回 致命错误 在解包可选值时意外发现 nil code var httpUrl subJson image url stringValu
  • 如何在 iPhone 上缩小 UIPickerView?

    我想降低一个高度UIPickerView在我的 iPhone 应用程序中 使其仅显示一行和一列 选择器视图的高度应等于行的高度 我正在使用 Interface Builder 来构建UIPickerView 但我找不到调整此控件大小的简单方
  • 高度在 IOS (iphone) 上无法正常工作

    我已经创建了this https codepen io salman15 project live DWbWpo Codepen 上的网站 在尝试使其响应所有平台时 我遇到了问题 看起来单个 div 覆盖了整个页面 仅在 IOS 上 并且并
  • 在从初始化器返回 nil 之前,必须初始化类实例的所有存储属性

    尽管我不断收到上述消息 但我正在尝试在课堂上使用此代码 let filePath NSString let fileHandle NSFileHandle let totalFileLength CUnsignedLongLong init
  • 在 Swift 中使用 NSCoding 归档可选结构数组?

    我已经在 Obj C 中完成了大量 NSCoding 归档 但我不确定它如何处理 Swift 中的结构 也不确定它如何处理具有可选值的数组 这是我的代码 public struct SquareCoords var x Int y Int
  • 优化 - 步进可能表现奇怪:iOS/Unity

    我正在尝试将 Unity 集成到 iOS 应用程序中 我已经遵循了这个教程http www agnosticdev com blog entry swift integrating unity and vuforia ios swift p
  • 从 AppDelegate 启动 ViewController

    我有一个自定义 URL 方案 我想打开某个ViewController当我访问此 URL 时 这不是根 我已经能够做到这一点 剩下的就是推动这一点ViewController进入navigationController来自AppDelega
  • AVAudioSessionPortBluetoothHFP、A2DP 和 LE 有什么区别?

    Apple 中记录了三种不同的蓝牙相关音频端口类型AVAudioSessionPort 描述 https developer apple com library ios documentation AVFoundation Referenc
  • 是否可以在“NSFetchRequest”中按子类排序而不添加其他属性?

    我想对结果进行分组NSFetchRequest按实体 这些实体都共享相同的抽象父级 例如 animal cat dog The NSFetchRequest has includesSubentities set TRUE and enti
  • 如何使用 Swift 将文本复制到剪贴板/粘贴板

    我正在寻找一个干净的示例 说明如何将文本复制到 iOS 剪贴板 然后可以在其他应用程序中使用 粘贴 该功能的好处是可以快速复制文本 无需传统文本复制的标准文本突出显示功能 我假设关键课程位于UIPasteboard 但在中找不到相关区域他们

随机推荐