IOS 关于UIImageView 圆角卡顿 FPS 问题解决

iOS 离屏渲染性能实测:3种圆角方案对比与 60FPS 优化策略 本文深入探讨iOS开发中离屏渲染对性能的影响,对比了三种圆角实现方案(cornerRadius + masksToBounds、CoreGraphics预绘制、CAShapeLayer蒙版)的性能数据,并提供了60FPS优化策略。通过实测数据与代码示例,帮助开发者选择最优方案,解决列表滚动卡顿问题,提升用户体验。 阅读详情

介绍

ZXLCornerRadiusImage 是解决 UIImageView 设置圆角产生FPS过低问题。
支持SDWebImage
支持图片来源于本地或者服务器。
支持 UIImageView 部分圆角设置。
支持 UIImageView 添加 borderWidth 、 borderColor。

对比

IOS 8.4 系统对比,目前我使用xcode 10.1 测试FPS时崩溃,不过感觉使用很流畅。
IOS 9.0 没有测试手机。
IOS 10.3.3系统对比
在这里插入图片描述
IOS 11.1.2 对比
在这里插入图片描述
IOS 12.1.3对比
在这里插入图片描述

通过优化前后对比可以看出,imageView.layer.cornerRadius 、 imageView.layer.masksToBounds 对系统版本FPS影响随着版本越高影响也就越小。如果你的App要兼容IOS10以及其以下版本不妨可以考虑以下使用我优化过的代码。

使用说明

    /**
 圆角值,其设置必须在 setImage 函数之前
 */
@property (nonatomic,assign) CGFloat cornerRadius;

/**
 圆角控制 (依赖 cornerRadius > 0)
 */
@property (nonatomic,assign) UIRectCorner roundingCorners;

/**
 边框宽度(依赖 cornerRadius > 0 和 borderColor 有值)
 */
@property (assign, nonatomic) CGFloat borderWidth;

/**
 边框颜色 (依赖 cornerRadius > 0 和 borderWidth > 0)
 */
@property (strong, nonatomic) UIColor* borderColor;

            UIImageView *imageView = [[UIImageView alloc] init];
            imageView.cornerRadius = kHeight/2;
            imageView.borderColor = [UIColor redColor];
            imageView.borderWidth = 1;
            imageView.roundingCorners = UIRectCornerTopLeft | UIRectCornerTopRight;

代码传送门

iOS性能优化-列表卡顿 会造成卡顿的原因大致有哪些? CPU和GPU 在屏幕成像的过程中,CPU和GPU起着至关重要的作用 CPU(Central Processing Unit,中央处理器) 对象的创建和销毁、对象属性的调整、布局计算、文本的计算和排版、图片的格式转换和解码、图像的绘制(Core Graphics) GPU(Graphics Processing Unit,图形处理器) 纹理的渲染 视图的... 阅读详情

相关推荐

【iOS】离屏渲染

这里我简单学习一下有关iOS渲染的相关知识。

2501_91546205的博客 325

小心别让圆角成了你列表的帧数杀手

http://www.cocoachina.com/ios/20150803/12873.html 前言 在iOS的世界,圆角无处不在,而且必须存在。因为圆角是符合人类视觉安全体验的,圆角让人觉得舒适,而方角在潜意识层次是具有伤害体验的,因为尖尖的东西总是有可能对人造成伤害的,所以我们更喜欢圆角。在我之前的文章中讲过,在iOS的中设置圆角是非常容易的一件事情,这也体现出苹果也是非常重视圆...

weixin_30814223的博客 254

iOS 性能优化 相关面试题 卡顿产生的原因(2)

有时我们的app在使用起来会感觉不是很流畅,那么卡顿产生的原因是什么呢? 这里就涉及两部分的操作 CPU GPU 在CPU和GPU共同努力下将数据加工好,等待下一帧Vsync信号的到来,就将内容显示在屏幕中,也就是说CPU、GPU使用的时间如果在16ms以内,就不会产生卡顿,如果超过了就会产生卡顿,因为其会显示上一帧的数据, 超时产生的数据会在下一帧Vsync信号到来的时候进行显示。 卡顿解决的主要思路 尽可能减少CPU、GPU资源消耗 60FPS 刷新频率,CPU、GPU加工数据在 16.7ms 以内就

杜甲同学的专栏 389

iOS性能谈设置圆角的卡顿解决

假如在tableView的每个cell里有较多的圆角,因为在layer.corner...开销过大,会造成滑动的卡顿,解决方法是可以通过贝塞尔曲线进行绘制圆角,代码如下: 卡顿原因可以参考这篇文章:http://blog.ibireme.com/2015/11/12/smooth_user_interfaces_for_ios/ // 如下所示 // Get your image s...

weixin_30376509的博客 396

IOS性能优化

CPU(Central Processing Unit中央处理器):对象的创建和销毁、对象属性的调整、布局计算、文本的计算和排版、图片的格式转换和解码、图像的绘制(Core Graphics)GPU(Fraphics Processing Unit图形处理器)纹理的渲染。在IOS中是双缓冲机制,有前帧缓存、后帧缓存。屏幕成像原理卡顿产生的原因。

qq_27945615的博客 1467

TCGA数据集介绍及数据下载指南(新手友好篇)

目录一、TCGA数据集介绍1.1 数据集介绍1.2 File介绍1.2.1 Data Category(数据类别)1.2.2 Data Type(数据类型)1.2.3 Experimental Strategy(实验策略)1.2.4 Workflow Type(工作流类型)1.2.5 Data Format(数据格式)1.2.6 Platform(平台)1.2.7 Access1.3 Cases介绍1.3.1 Case ID(案例编号)1.3.2 Primary Site(主要站点)1.3.3 Progra

Wendy的博客 6万+

iOS学习笔记之g高效实现圆角的方式---防止页面卡顿

问题 这个需求要求我们做圆角,业界也有很多做圆角的方式,最简单的就是设置label.layer.cornerRadius = 2; label.layer.masksToBounds = YES; 但是这样做(label.layer.cornerRadius > 0 && label.layer.masksToBounds = YES)会出现离屏渲染,对于页面中只有少量需要做圆角,也不会造成

ANDY_GUO_wei的专栏 780

23.网工入门篇--------介绍一下园区网典型组网架构及案例实践

园区网典型组网架构主要分为小型、中型、大型三种类型,以下是详细介绍及相关案例实践:

qq_31450765的博客 964

iOS 大量圆角的使用影响性能问题

iOS设备的硬件时钟会发出Vsync(垂直同步信号),然后App的CPU会去计算屏幕要显示的内容,之后将计算好的内容提交到GPU去渲染。随后,GPU将渲染结果提交到帧缓冲区,等到下一个VSync到来时将缓冲区的帧显示到屏幕上。也就是说,一帧的显示是由CPU和GPU共同决定的。 ios_frame_drop.png 从上图可以看出,第三个Vsyc到来时GPU还没有渲染好,

IT_litterPang的博客 2999

LangChain4j 开发

市场上主流的 Java 调用大模型的工具库有两种:LangChain4j 是一个 面向 Java 的开源框架,用于构建 基于大语言模型(LLMs) 的应用程序。它是 LangChain(Python 生态中非常流行的 LLM 应用框架)的 Java 实现,旨在让 Java 开发者能够轻松地集成和使用各种 LLM 服务,快速开发 智能聊天机器人、智能搜索、文档问答、Agent系统 等 AI 驱动的应用。官网文档:https://docs.langchain4j.dev/。引入依赖(JDK17 及以上): 构建

m0_62943934的博客 2790

comsol移动网格_comsol模拟移动的纳秒脉冲激光烧蚀材料,温度场分布,结果总不理想,求助大佬!!...

本人comsol新手一枚,希望大家多多指点研究课题:纳秒脉冲激光刻蚀材料表面想用comsol模拟刻蚀过程中的温度场分布,脉宽为300ns,重复频率100kHz,光斑移动速度为5000mm/s,光斑直径50um,激光功率10W,材料种类为:有机涂层,属性如下目前,采用的是一个移动的高斯面光源x脉冲函数,脉冲函数我用的是一个周期性方波:周期性拓展后,画出来的脉冲图,不知道为什么在0~1s的区间内只有1...

weixin_33288893的博客 4740

iOS一个简单的设置圆角不引起性能问题的分类

原文 写在前面 iOS设置圆角的性能探究已经是一个老生常谈的问题了,众所周知,如果直接使用layer的cornerRadius + masksToBounds虽然可以很方便的完成圆角设置,但会引起离屏渲染,导致性能问题,在列表视图中过多的圆角设置就会导致滑动卡顿,现在主流的方案就是在获取图片的一刻开启异步线程对图片进行相应的圆角处理,把图片处理成想要的图片在返回主线程进行显示,想要便捷的达成此...

weixin_30699443的博客 226

宜搭,高级认证实操2,FaaS连接器指导教程

找到FaasEntry.java将如下代码整体替换,注意引包。如图所示在util下新建EDSUtil.java代码如下。回到连接器界面点击右上角测试-->测试。连接器工厂-->新建FaaS连接器。保存-->前往云IDE开发。返回如图所示代码,部署成功。

2301_80286061的博客 3342

为什么你的iOS应用会卡顿?JMRoundedCorner解决圆角性能问题的5个关键点

在iOS应用开发中,圆角设计是提升界面美观度的常用手段,但许多开发者都会遇到一个头疼的问题:添加圆角后应用变得卡顿。这通常是由于传统圆角实现方式触发了离屏渲染,导致GPU负载过高。JMRoundedCorner作为一款专注于圆角性能优化的开源库,通过创新技术实现了UIView设置不触发离屏渲染的圆角,有效解决了这一痛点。 ## 一、离屏渲染:iOS应用卡顿的隐形杀手 🕵️‍♂️ 离屏渲染(O

gitblog_00410的博客 856

RK3588+YT9215快速拓展以太网口

YT9215支持7个端口的非阻塞数据传输,确保高效的数据流处理;在开发过程中,最重要的一点就是YT9215与RK3588的GMAC连接和配置部分,下面是gmac1对应dtsi文件的修改,包括注释掉rgmii_phy1对应的mdio1,以及gmac1对应的phy-handle部分,同时将gmac1修改成1000Mbps全双工模式。这就是最简单,最快速的RK3588拓展网口的方法了,如果需要用到交换芯片的其他功能,那就不可以直接使用原厂提供的bin,而是需要对YT9215进行另外的驱动开发。

带着耳朵取流浪的博客 2785

如何使用Agent框架来模拟群体智能?

Agent 框架作为人工智能领域的重要工具,可以模拟复杂的群体智能行为,广泛应用于社会科学、经济学和行为学等领域。

334

深入探索 iOS 卡顿优化

iOS卡顿优化

Unlimitedz的博客 2222

Allegro层叠中的介电常数如何填写指导说明

在用Allegro进行PCB设计的时候,需要在cross-section中设置好每个层的信息,包括层命名,每层的厚度等等信息。但是对于有仿真需求或者等长设计需要使用ps作为延时单位的设计的时候,需要额外在层叠中填写介电常数的值,如下图。按照经验值填写为2.8,因为外层和平面层不会被树脂填充,铜皮层还是完整的铜皮,如下图。对应层叠将每层介质的介电常数的数值填入到PCB中去,油墨的介电常数填4。层叠中只给出了每个介质的介电常数,铜皮的介电常数却没有给出。所以正确填写介电常数的结果如下图。需要按照下面的规则来。

weixin_54787054的博客 1391

iphone屏幕圆角插件_关于iOS控件设置圆角的一些个人看法(iOS 10.0.2)

写在最前面:该文章使用的机器是iPhone 6(iOS 10.0.2),得出的结果跟iOS 8和iOS 9不太一样,关于iOS 8和iOS 9的结论,在最后有。这几天看简书上的文章,看到几篇关于控件设置圆角的,大多数都说是layer.masksToBounds=YES会引起FPS的降低,但是经过我的测试,并不是这句话引起的,而是这句话再加上设置边框,即layer.borderWidth=1.0,只...

weixin_39622747的博客 438

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

iOS 卡顿

文章目录 一、CPU 和 GPU 1、CPU 2、GPU 二、卡顿 1、屏幕成像原理 2、卡顿产生原因 3、卡顿解决思路 4、卡顿解决方案 三、离屏渲染 1、什么是离屏渲染 2、离屏渲染消耗性能 3、如何触发离屏渲染 4、如何检测离屏渲染 四、卡顿检测 一、CPU 和 GPU 在屏幕成像过程中,CPU 和 GPU 起着至关重要的作用 1、CPU(中央处理器) 负责: 对象的创建(alloc)和销毁(release)、对象属性的调整

风中的劲草 900

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

iOS开发中卡顿的产生以及如何优化卡顿

iOS开发中卡顿的产生以及如何优化卡顿

u013712343的博客 512

JMRoundedCorner与YYWebImage集成:网络图片圆角处理的最佳方案

在iOS开发中,处理网络图片的圆角显示是一个常见但棘手的问题。传统的`layer.cornerRadius`方法虽然简单,但会触发离屏渲染,导致性能问题,特别是在列表滚动时会出现明显的卡顿。JMRoundedCorner与YYWebImage的集成提供了一个终极解决方案,既能保证圆角效果,又不会影响性能。😊 ## 为什么需要JMRoundedCorner? JMRoundedCorner是一

gitblog_00763的博客 392

iOS 优化一:

View的子控件:圆角性能测试 1,当屏幕中出现17个UIImageView 和 17个Lable,并对其进行圆角切割 self.lab1.layer.masksToBounds = YES; self.lab1.layer.cornerRadius=5; self.imgView.image = [UIImage imageNamed:@"header.jpg"];

_ 407

iOS界面优化 / UIKit性能调优

卡顿发生的原因首先我们需要明确一下刷帧率的概念,玩游戏的人对FPS这个词一般不会陌生,刷帧率代表设备在1s内刷新显示图像的帧数,iPhone推荐的刷帧率是60,即16.7ms内刷新一帧。这里借用一下ibireme大神的插图来介绍一下刷新一帧图像系统都做了哪些事情 首先CPU会计算显示内容,包括布局的计算、图片解码、文本的预先绘制(绘制成GPU渲染需要的纹理资源),随后由GPU进行变换、合成等一些光

u014604106的博客 803

view绘制渲染机制和runloop什么关系?所谓的列表卡顿,到底是什么原因引发的?drawrect方法内为何第一行代码总要获取图形的上下文?

当在操作 UI 时,比如改变了 Frame、更新了 UIView/CALayer 的层次时,或者手动调用了 UIView/CALayer 的 setNeedsLayout/setNeedsDisplay方法后,这个 UIView/CALayer 就被标记为待处理,并被提交到一个全局的容器去。 苹果注册了一个 Observer 监听 BeforeWaiting(即将进入休眠) 和 Exit (即...

Soccer_ZZM的博客 1122

iOS性能优化

CPU和GPU 1.在屏幕成像过程中,CPU和GPU起着至关重要的作用 CPU(Central Processing Unit,中央处理器) 对象的创建和销毁、对象属性的调整、布局计算、文本的计算和排版、图片的格式转换和解 码、图像的绘制(Core Graphics) GPU(Graphics Processing Unit,图形处理器) 纹理的渲染 2.在iOS中是双缓冲机制,有前帧...

蓝云阁主的博客 1075
上一篇: ios UIImageView 部分圆角(加上 borderWidth、borderColor 效果修复)
下一篇: ios UIModalPresentationPopover 写一个带箭头的提示框(主讲一下界面效果调试)
蟒蛇_AutoFire
博客等级 码龄16年 21粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值