首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

图形

: inContext: 注意要显式调用[view.layer setNeedsDisplay]这个方法才起作用 - (void)drawLayer:(CALayer *)layer inContext...orangeColor] setFill]; [p fill]; UIGraphicsPopContext(); } 4、CALayer+drawInContext 插入Layer层,注意插入Layer层时,...- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx{ UIGraphicsPushContext(ctx); UIBezierPath...snapshot; // 继续绘图 四、CALayer与UIView 视图即UIView,并不是直接显示在屏幕上,而是在创建视图对象的时候视图对象会自动创建一个层,而视图对象把要显示的东西绘制在层上,待到需要显示时硬件将所有的层拷贝...:inContext:,并传入刚才准备好的上下文 view的drawLayer:inContext:方法内部又会调用view的drawRect:方法 view就可以在drawRect:方法中实现绘图代码

1.1K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    iOS CPU异步绘制的流程

    前言 ---- 我们知道iOS界面渲染需要依靠强大图像计算能力的GPU,但是GPU并不是万能的,过分依赖GPU往往会导致GPU的性能出现瓶颈,要么导致离屏渲染,严重时还会出现卡顿现象。...为了减轻GPU的负担,我们有时也需要依靠CPU来进行协助绘制,这篇文章主要讲解CPU进行异步绘制的流程,部分内容摘录自iOS探索:UI视图之卡顿、掉帧及绘制原理 UIView的绘制原理(CPU绘制)...UIView绘制流程以及异步绘制.png 当我们调用[UIView setNeedsDisplay]这个方法时,其实并没有立即进行绘制工作,系统会立刻调用CALayer的同名方法,并且会在当前layer...delegate是否响应displayLayer:这个方法,如果响应这个方法,就会进入到系统绘制流程中;如果不响应这个方法,那么就会为我们提供异步绘制的入口 在异步绘制中,会先判断代理是否有实现协议的drawLayer...:inContext方法,如果有实现,就会创建一个空的寄宿图和Core Craphics的绘制上下文,为绘制寄宿图做准备,然后会在一个合适的时候调用一个我们非常熟悉的方法[UIView drawRect

    74450

    iOS 视图,动画渲染机制探究

    用户使用 App 时最直接的体验就是这个界面好不好看,动画炫不炫,滑动流不流畅。UI就是 App 的门面,它的体验伴随着用户使用 App 的整个过程。如果UI失败,用户是不会有打开第二次的欲望的。...好了,废话不说,我们进入主题:看看 iOS 是如何渲染视图和动画的,以及在我们遇到渲染的性能问题时怎么做优化。 (注意:以下内容是笔者的一些踩坑经验和总结, 欢迎探讨!)...: inContext:] 来画出来的。...实现了 drawRect 或者 drawLayer:inContext:,为了支持任意的绘制,core graphic 会创建一个大小跟要画的 view 一样的 backing image。...可以看到这 Renderer Utilization 是20%左右,Tiler Utilization 时15%,可以不用优化,(当然这里我们先不考虑 CPU 的使用情况,只是单单针对上面 Core Animation

    1.6K120

    iOS 视图,动画渲染机制探究

    用户使用 App 时最直接的体验就是这个界面好不好看,动画炫不炫,滑动流不流畅。UI就是 App 的门面,它的体验伴随着用户使用 App 的整个过程。如果UI失败,用户是不会有打开第二次的欲望的。...好了,废话不说,我们进入主题:看看 iOS 是如何渲染视图和动画的,以及在我们遇到渲染的性能问题时怎么做优化。 (注意:以下内容是笔者的一些踩坑经验和总结, 欢迎探讨!)...: inContext:] 来画出来的。...实现了 drawRect 或者 drawLayer:inContext:,为了支持任意的绘制,core graphic 会创建一个大小跟要画的 view 一样的 backing image。...可以看到这 Renderer Utilization 是20%左右,Tiler Utilization 时15%,可以不用优化,(当然这里我们先不考虑 CPU 的使用情况,只是单单针对上面 Core Animation

    1.9K91

    自定义一个浮层弹窗视图

    CoreAnimation是iOS中实现动画的框架,整个iOS中的动画(比如UIView中封装的动画、UIViewController切换时的转场动画、UITableViewCell移除增添时的动画等,...通过UIView的系统封装好的动画,我们可以实现日常开发中80%的动画需求,剩下的一些较复杂的动画,可以使用CoreAnimation来自定义。...关于CoreAnimation,我之前写过一系列的文章,在这里罗列一下: 通过重写drawRect方法在UIView中进行绘图 通过重写drawLayer:InContext:方法在CALayer中进行绘图...Lottie是Airbnb开源的一个面向iOS、Android、React Native的动画库,能分析Adobe After Effects导出的动画,并且能让原生App像使用静态素材一样使用这些动画...设计师设计出一组动画效果,然后导成JSON文件,我使用Lottie解析该JSON文件就可以将动画效果展示出来,使用非常简单。

    1.4K30

    iOS开发之扫描二维码

    自iOS7以后,iOS扫描二维码不需要借助于第三方框架了,苹果在AVFoundation中原生支持了扫描二维码的API,主要涉及到5个类,这5个类在自定义相机或者视频时也用得上,网上有很多介绍,这5个类分别为...AVCaptureVideoPreviewLayer:相机拍摄预览图层,是CALayer的子类,使用该对象可以实时查看拍照或视频录制效果,设置好尺寸后需要添加到父view的layer中。...[self.scanline removeFromSuperview]; } } /** * 蒙版中间一块要空出来 */ -(void)drawLayer...:(CALayer *)layer inContext:(CGContextRef)ctx{ if (layer == self.maskLayer) {...二、参考文献 1、iOS开发系列--音频播放、录音、视频播放、拍照、视频录制 2、iOS开发 - 二维码的扫描 3、iOS二维码扫描与生成(优化启动卡顿) 三、源代码

    1.9K40

    iOS界面渲染流程分析

    平台渲染核心原理的重点主要围绕前后帧缓存、Vsync信号、CADisplayLink 文字简答: 首先一个视图由CPU进行Frame布局,准备视图和图层的层级关系,查询是否有重写drawRect:或drawLayer...:inContext:方法,注意:如果有重写的话,这里的渲染是会占用CPU进行处理的。...特别是使用iOS6的自动布局机制尤为明显,它应该是比老版的自动调整逻辑加强了CPU的工作。 视图懒加载 iOS只会当视图控制器的视图显示到屏幕上时才会加载它。...Core Graphics绘制 如果对视图实现了drawRect:或drawLayer:inContext:方法,或者 CALayerDelegate 的 方法,那么在绘制任何东 西之前都会产生一个巨大的性能开销...---- Metal渲染引擎 当你现在再去查阅官方文档时,你会发现苹果官方已经使用Metal去替代OpenGL ES作为Core Animation的渲染。 ?

    2.6K20

    老司机带你走进Core Animation 之粒子发射、TileLayer与异步绘制

    为什么他们放到最后讲呢,因为他们的使用率不高,至少在app方面上。...:(CALayer *)layer inContext:(CGContextRef)ctx { CGContextDrawPDFPage(ctx, self.page); } 这个就是上面demo...应用这一特性,设置Layer持有一个基本数据类型的计数量,用一个临时变量存储及数量后,block中比较临时变量与layer持有的计数量的值,因为临时变量是被copy走的,不会随外界改变,所以当外界改变时,...你猜我笑啥 ---- 参考资料 iOS粒子系统CAEmitterLayer 研究了一下CATiledLayer的levelsOfDetail和levelsOfDetailBias的含义 使用 ASDK...性能调优 - 提升 iOS 界面的渲染性能 iOS 保持界面流畅的技巧 关于drawRect ---- 最后的最后,一般都是软广环节: DWCoreTextLabel更新到现在已经1.1.6版本了,现在除了图文混排功能

    97520

    让你的iOS应用程序支持运行JavaScript脚本:JavaScriptCore框架详解

    让你的iOS应用程序支持运行JavaScript脚本:JavaScriptCore框架详解     说到JavaScript脚本,iOS开发者都会想到一个名叫JavaScriptCore的框架。...本篇博客主要讨论如何使用此框架来在iOS应用中运行JavaScript脚本。...一、JavaScriptCore框架结构     在学习一个框架时,首先应该先了解整个框架的结构,拿iOS开发来举例,对于一个陌生的框架,第一步需要先搞清楚这里面都包含哪些类,个各类之间是怎样的关系,这个框架和其他的框架间有无联系以及怎样产生的联系...JSManagerValue对JSValue进行了一层包装,它可以保证在适合时候使用这个对象时对象都不会被释放,其中方法如下: //创建JSVlaue对象的包装JSManagerValue + (JSManagedValue...2.下发JS脚本,使用类似ReactNative的框架进行原生渲染     这是一种效率非常高的混合开发模式,并且ReactNative也本身支持android和iOS公用一套代码。

    5.2K30

    SwiftUI 动画进阶 — Part 5:Canvas

    最后,你可以使用 context 的方法:drawLayer。...Canvas 崩溃 不幸的是,在写这篇文章的时候,我遇到了 Canvas 的一些崩溃问题。幸运的是,它们在每个测试版中都有很大的改进。我希望在iOS15正式发布时,它们都能得到解决。...我设法解决了这些崩溃的问题,至少使用了其中一个方法: 减少绘图量。在数字雨的例子中,你可以减少列的数量。 使用更简单的渐变。最初,数字雨柱有三个颜色的渐变。当我把它减少到两个时,崩溃就消失了。...使用较慢的时间轴视图,可以防止崩溃。 我并不是说你不能使用超过两种颜色的渐变,但这只是你可以考虑的一个地方,如果你发现自己处于Canvas崩溃的情况。...如果这还不能解决你的问题,我建议你开始删除绘图操作,直到应用程序不再崩溃。这可以引导你找到导致崩溃的原因。一旦你知道是什么原因,你可以尝试用不同的方法来做。

    2.7K10

    iOS 页面渲染 - UIView & CALayer

    其实上面已经提到 CALayer 和 UIView 其实不属于同一个框架,CALayer 所属的 QuartzCore 框架是可以跨平台使用的,在 iOS 以及 macOS 中都可以使用,但是 UIKit...属性改变时 layer 会向 view 请求一个动作,而一般情况下 view 将返回一个 NSNull,只有当属性改变发生在动画 block 中时,view 才会返回实际的动作。...iOS 中将该缓存区保存的图片称为 寄宿图。而当设备屏幕进行刷新时,会从 CALayer 中读取生成的 bitmap, 进而呈现到屏幕上。...那么绘制页面也有两种方式: 一种是 手动绘制; 一种是 使用图片。...如果有 delegate,则会执行 [layer.delegate drawLayer:inContext],然后在这个方法中会调用 view 的 drawRect: 方法,也就是我们重写 view 的

    1.9K20

    【IOS开发进阶系列】动画专题

    如果代理不实现-displayLayer:方法,CALayer就会转而尝试调用下面这个方法: - (void)drawLayer: (CALayer *)layer inContext: (CGContextRef...当使用寄宿了视图的图层的时候,你也不必实现-displayLayer:和-drawLayer:inContext:方法绘制你的寄宿图。...这也是为什么最好使用视图而不是单独的图层来构建应用程序的另一个重要原因之一。...除了设置图层和滑动视图边界以适配整个图片大小,我们真正要做的就是实现-drawLayer:inContext:方法,当需要载入新的小图时,CATiledLayer就会调用到这个方法。...使用draw:inContext实现自定义重新绘制 - (void) drawLayer: (CALayer *)layer inContext: (CGContextRef)ctx {     CGMutablePathRef

    56910

    【重磅推荐】2015年移动应用质量大数据报告

    按月去重统计,则每月有高达 1.8 亿 的设备遭遇应用崩溃。 3每天有大量用户会遇到多次应用崩溃 应用程序发生崩溃,通常表现在你打开,或者试运行它的时候立即退出。...有时候一个应用程序的崩溃可能在你开启它的一瞬间就会发生,或者在你不希望停下的时候发生,每次崩溃都会导致大量用户卸载应用。...注:崩溃率 = 当天发生崩溃的设备数 /当天联网设备数,本报告后续所有崩溃率均按此标准计算 5使用崩溃分析服务能快速降低崩溃率 使用Bugly等崩溃分析服务,可以让开发者在第一时间了解应用崩溃的原因,...11近半 Android 崩溃发生在应用启动后60秒内 Android上的应用崩溃,有近 50% 是发生在启动应用运行的前60秒,使用优测等云测试平台对应用进行适配测试,主路径覆盖,可以在应用发布前发现一半的应用崩溃问题...但 iOS 7 和 iOS 8 仍然占据一定的市场比例;各系统版本的崩溃率从高到低整体上是 iOS 7 > iOS 9 > iOS 8,在应用开发适配系统版本时,iOS 8 系列版本仍是当前适配最好的,

    96730
    领券