当前位置: 首页 > news >正文

iOS 14 YYAnimatedImageView加载图片失败处理

升级到iOS14,之前使用的YYimage框架全部不能正常显示图片,当然动态图正常显示,静态图无法显示;
原因是:14.0 系统调用了下面方法,YYAnimatedImageView没有正确处理

-(void)displayLayer:(CALayer )layer;
1
可以用以下方式处理:

方式一:

更改YYimage源码,在YYAnimationImageView.m中

- (void)displayLayer:(CALayer *)layer {
    if (_curFrame) {
        layer.contents = (__bridge id)_curFrame.CGImage;
    } else {
        if (@available(iOS 14.0, *)) {
            [super displayLayer:layer];
        }
    }
}

方式二:

不更改YYimage源码,以防之后作者升级,使用Hook的技术处理

+ (void)load {
    Method a = class_getInstanceMethod(self, @selector(displayLayer:));
    Method b = class_getInstanceMethod(self, @selector(swizzing_displayLayer:));
    method_exchangeImplementations(a, b);
}

- (void)swizzing_displayLayer:(CALayer *)layer {   
    //通过变量名称获取类中的实例成员变量
    Ivar ivar = class_getInstanceVariable(self.class, "_curFrame");
    UIImage *_curFrame = object_getIvar(self, ivar);

    if (_curFrame) {
        layer.contents = (__bridge id)_curFrame.CGImage;
    } else {
        if (@available(iOS 14.0, *)) {
            [super displayLayer:layer];
        }
    }
}
 

http://www.lryc.cn/news/190802.html

相关文章:

  • 兴趣社如何搭建一个兴趣社区?
  • 腾讯wifi码推广如何代理?方法详解!
  • linux下读取socket相关的系统调用总结
  • kafka生产者发送消息报错 Bootstrap broker localhost:9092 (id: -1 rack: null) disconnected
  • 内存文件初始化
  • 【`opencv_core` 和 `opencv_imgcodecs` 是 OpenCV(开源计算机视觉库)的两个主要模块】
  • 系统架构师备考倒计时24天(每日知识点)
  • 多无人机编队集群飞行
  • 【C++杂货铺】一文带你走进哈希:哈希冲突 | 哈希函数 | 闭散列 | 开散列
  • docker 搭建本地Chat GPT
  • 电脑怎么剪辑视频?高手分享的独家秘诀
  • LCR 171.训练计划 V
  • CH6-中断和异常处理
  • Hive的文件合并
  • Mac删除不在程序坞的程序
  • c#删除数组中符合条件的元素
  • sqoop 脚本密码管理
  • 微信小程序使用CryptoJS加密PassWord(MD5)
  • 国有企业合同领域的合规管理
  • Joe主题魔改:正文内容实现图片懒加载
  • 网络爬虫实践小结
  • 逍遥魔兽:如何在服务器上挂机器人?
  • 软件工程与计算总结(九)软件体系结构基础
  • bootz启动 Linux内核涉及do_bootm_linux 函数
  • ipad有必要用手写笔吗?性价比电容笔排行榜
  • jmeter怎样的脚本设计才能降低资源使用
  • 如何避免 IDEA 每次重启都index
  • ImagePreview查看gif图,关闭之后原图不动了
  • 实现基于 GitLab 的数据库 CI/CD 最佳实践
  • android关闭键盘方法