• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

iOS 在后台线程上访问 UIScreen

[复制链接]
菜鸟教程小白 发表于 2022-12-12 13:36:58 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有一个方法负责加载有关事件的详细信息(查询标题、描述、缩略图路径等的 sqlite 数据库),因为我需要为大量事件调用它,所以我正在调度使用 Grand Central Dispatch 到后台线程。

问题是我遇到了 UIKit 线程异常(让我知道我正在主线程以外的线程上运行 UI 方法,导致应用程序崩溃)。我根本没有改变 UI,所以这几乎是不可能找到的,但我最终将其缩小到一行代码:

bool retina = (UIScreen.MainScreen.Scale > 1.0);

我正在使用 UIScreen 来确定设备是否具有视网膜屏幕(以确定缩略图图像路径是否应在末尾附加“@2x”)并且仅访问它(似乎是静态变量)会抛出UIKit 异常。

是否有解决方法来确定屏幕是否是不使用 UIKit 的视网膜(或者是后台线程安全的),还是有更好的方法来解决这个问题?

注意:我使用 Xamarin (C#) 来创建应用程序,但是 swift 中的任何答案都非常好并且易​​于转换。



Best Answer-推荐答案


首先,您不必在打开刚刚显示在屏幕上的图像时指定 @2。 iOS 使用 UIImage(named: "BaseName") 选择正确的版本。

但如果你需要,你的 Swift 代码在这里:

func isRetina() -> Bool
{
    var scale: CGFloat = 0.0
    DispatchQueue.main.sync
    {
        scale = UIScreen.main.scale
    }

    return scale > 1.0
}

因为你在很多地方使用它,考虑把它放在一些实用程序/基类中。

关于iOS 在后台线程上访问 UIScreen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45379966/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap