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

如何防止UIView的drawRect清除以前drawRect调用绘制的路径?

要防止UIViewdrawRect清除以前drawRect调用绘制的路径,可以使用以下方法:

  1. drawRect方法中使用CGContextSaveGStateCGContextRestoreGState方法保存和恢复绘图上下文。
代码语言:swift
复制
override func draw(_ rect: CGRect) {
    guard let context = UIGraphicsGetCurrentContext() else { return }
    CGContextSaveGState(context)
    // 绘制路径
    CGContextRestoreGState(context)
}
  1. 使用CAShapeLayer来绘制路径,并将其添加到UIViewlayer中。
代码语言:swift
复制
let shapeLayer = CAShapeLayer()
shapeLayer.path = // 路径
shapeLayer.strokeColor = // 路径颜色
shapeLayer.fillColor = // 路径填充颜色
layer.addSublayer(shapeLayer)
  1. 使用UIBezierPath来绘制路径,并将其添加到CAShapeLayer中。
代码语言:swift
复制
let path = UIBezierPath()
// 绘制路径
let shapeLayer = CAShapeLayer()
shapeLayer.path = path.cgPath
shapeLayer.strokeColor = // 路径颜色
shapeLayer.fillColor = // 路径填充颜色
layer.addSublayer(shapeLayer)

这些方法可以帮助您防止UIViewdrawRect方法清除以前drawRect调用绘制的路径。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

谈谈对drawRect理解

当子类使用Core Graphics和UIKit绘制视图内容时就需要在该方法中添加绘制代码。 drawRect简介 drawRect方法在UIView使用上起着十分关键作用。...该方法定义在UIView(UIViewRendering)分类里面,望文生义,该方法完成视图绘制。...重绘作用:重写该方法以实现自定义绘制内容 drawRect调用场景 视图第一次显示时候会调用。...异步调用drawRect,但是绘制视图动作需要等到下一个绘制周期执行,并非调用该方法立即执行; - (void)setNeedsDisplayInRect:(CGRect)rect;:标记为需要局部重绘...若子类继承自其他View类则需要调用super方法以实现重绘。 若使用UIView绘图,只能在drawRect:方法中获取绘制视图contextRef。

1.8K20
  • iOS学习——Quartz2D学习(1)

    UIView之所以能够显示就是因为他内部有一个图层) Printer Graphics Context 6.如何自定义UIView,步骤是什么? ...相关联.才能将内容绘制到View上面.在DrawRect方法方法里 步骤: 1.要先自定定UIView 2.实现DrawRect方法 3.在DrawRect方法中取得跟View相关联上下文.... 4.绘制路径(描述路径长什么样). 5.把描述好路径保存到上下文(即:添加路径到上下文) 6.把上下文内容渲染到View 7、DrawRect方法作用?...什么时候调用. DrawRect作用:专用在这个方法当中绘图.只有在这个方法当中才能取得跟View相关联上下文....DrawRect是系统自己调用, 它是当View显示时候自动调用. 8、画线(基本步骤描述)  //1.获取跟View相关联上下文 CGContextRef ctx = UIGraphicsGetCurrentContext

    1.1K20

    图形

    该框架可以用于基于路径绘图、变换、颜色管理、脱屏渲染,模板、渐变、遮蔽、图像数据管理、图像创建、遮罩以及PDF文档创建、显示和分析 Graphics Context Graphics Context...幸运是,调用UIGraphicsPushContext 函数可以方便将context:参数转化为当前上下文,记住最后别忘了调用UIGraphicsPopContext函数恢复上下文环境。...1、UIView+drawRect+UIBezierPath 重写drawRect能够自动生成Context,所以可以在drawRect方法里面画图形 - (void)drawRect:(CGRect...视图即UIView,并不是直接显示在屏幕上,而是在创建视图对象时候视图对象会自动创建一个层,而视图对象把要显示东西绘制在层上,待到需要显示时硬件将所有的层拷贝,然后按Z轴高低合成最终显示结果...:,并传入刚才准备好上下文 viewdrawLayer:inContext:方法内部又会调用viewdrawRect:方法 view就可以在drawRect:方法中实现绘图代码, 所有东西最终都绘制

    1.1K10

    iOS学习——Quartz2D学习之UIKit绘制

    在IOS上无论采用哪种绘图技术(UIKit、Quartz 2D、Core Animation和OpenGL ES),都离不开UIView绘制都发生在UIView对象区域内。...一旦drawRect:方法被调用,就可以使用任何UIKit、Quartz 2D、OpenGL ES等技术对视图内容进行绘制了。   ...触发视图重新绘制动作有如下几种: 当遮挡你视图其他视图被移动或删除操作时候; 将视图hidden属性声明设置为NO,使其从隐藏状态变为可见; 将视图滚出屏幕,然后再重新回到屏幕上; 显式调用视图...,不管有没有上下文,只要在View上面画东西,都得要在DrawRect方法中去写 5、如何添加绘制文字属性?   ...在前面我们学会了如何在自定义view中绘制文本信息,其实绘制图片方法绘制文本方法非常类似,所以基本步骤如下: 导入素材 在DrawRect加载图片  UIImage *image = [UIImage

    1.5K20

    UI篇-VC生命周期以及UIViewlayoutSubviews和drawRect方法

    : ** 在使用 VC绘制UI时候,它不同于 UIViewUIView中 init方法调用后,UIView就已经绘制好(初始化好了)。...但是在VC中,当前UIView是在 viewDidLoad 执行后才初始化好,所以我们会见到这样一个Bug,在VC初始化语句后面调用 一个 VC绘制UI方法,你会发现根本没有效果,这就是因为,VC...中跟试图初始化是需要时间,你在VC根试图初始化之前调用绘制UI方法当然是不会有效果出现。...7、直接调用setLayoutSubviews。 drawRect在以下情况下会被调用: 1、如果在UIView初始化时没有设置rect大小,将直接导致drawRect不被自动调用。...** 2、**若使用calayer绘图,只能在drawInContext: 中(类似鱼drawRect绘制**,或者在delegate中相应方法绘制

    1.9K30

    UI进阶13 Quartz2DQuartz2D

    (自定义UI控件) 如何利用Quartz2D绘制东西到view上?...首先,得有图形上下文,因为它能保存绘图信息,并且决定着绘制到什么地方去 其次,那个图形上下文必须跟view相关联,才能将内容绘制到view上面 自定义view步骤 新建一个类,继承自UIView...实现- (void)drawRect:(CGRect)rect方法,然后在这个方法中 取得跟当前view相关联图形上下文 绘制相应图形内容 利用图形上下文将绘制所有内容渲染显示到view上面...因为在drawRect:方法中才能取得跟view相关联图形上下文 drawRect:方法在什么时候被调用?...(ctx); …… drawRect:中取得上下文 在drawRect:方法中取得上下文后,就可以绘制东西到view上 View内部有个layer(图层)属性,drawRect:方法中取得是一个Layer

    68830

    绘图-几个较复杂统计图案例实现分析

    关键是根据数值,计算出各个控制点,调用绘图方法绘制曲线路径。...小圆点动画 根据数据源,在每一数据点处放上一个自定义UIView,在此自定义UIViewdrawRect绘制圆形图形,并且设置 shape.layer.opacity = 0;,即让这些小圆点(...UIBezierPath,把这个路径拼接上X坐标轴上两个垂直投影点形成一个底部矩形状封闭路径,把个路径作为渐变图层path,并绘制一条比这个UIBezierPath顶部低一点路径作为 渐变图层遮罩图层...绘制关键步骤: 使用for循环在 drawRect方法中绘制每一个扇形(上篇文章已将讲过),因为环外标注,所以圆环需要小些,否则外环线上文字绘制起来有可能空间不够。...: 关于K线图可以左右滑动以及放大缩小,而是当手指滑动或者啮合时候调用了- (void)drawRect:(CGRect)rect方法,而是又重新画上去了,因为调用比较频繁,所以看起来像是在滑动一样!

    1.4K20

    iOS layout相关方法

    layoutSubviews 5.旋转Screen会触发父UIViewlayoutSubviews事件 6.改变UIView大小时候也会触发父UIViewlayoutSubviews事件 在苹果官方文档中强调...drawRect在以下情况下会被调用: 1、如果在UIView初始化时没有设置rect大小,将直接导致drawRect不被自动调用。...然后系统自动调用drawRect:方法。 3、通过设置contentMode属性值为UIViewContentModeRedraw。那么将在每次设置或更改frame时候自动调用drawRect:。...以上1,2推荐;而3,4不提倡 drawRect方法使用注意点: 1、若使用UIView绘图,只能在drawRect:方法中获取相应contextRef并绘图。...2、若使用calayer绘图,只能在drawInContext: 中(类似于drawRect绘制,或者在delegate中相应方法绘制

    1.1K10

    Quartz2D实战-画板工具

    DrawRect: 首先我们需要知道,- (void)drawRect:(CGRect)rect方法是在什么时候调用: ?...我们发现该方法是在视图即将展示时候调用,在这个方法中可以获取到上下文,将试图绘制到View上,其实每一个View内部都有一个layer属性,这个方法中就可以了取得一个layer,所以我们绘制东西其实是绘制到...void)drawRect:(CGRect)rect调用时机: 当view第一次显示到屏幕上时(被加到UIWindow上显示出来) 调用viewsetNeedsDisplay或者setNeedsDisplayInRect...、描述路径等操作就可以将路径绘制到view上去。...重点看[path stroke]方法,其实这个方法内部已经帮我们实现了绘制视图几个步骤: 获取上下文 描述路径路径添加到上下文 把上下文内容渲染到Viewlayer 伪代码如下: 1.

    44240

    iOS动画-CALayer基础知识

    时,其内部会自动创建CALayer图层对象(即UIView关联图层),UIView调用drawRect:方法进行绘图,并且将所有的内容绘制到自己图层上,绘制完毕后,系统会将图层拷贝到屏幕上,于是就完成了...-drawRect:方法是UIView没有默认实现方法,因为寄宿图并不是必须;但如果UIView检测到此方法被实现了,此方法会被自动调用,然后我们就可以在其中使用Core Graphics绘制自己需要内容了...,并结合定时器调用-setNeedsDisplay方法,就可以实现环形动画效果(这里就不做具体演示了); 四、CALyer方法绘制自定义寄宿图 虽然-drawRect:方法是实现了自定义寄宿图绘制,但事实上还是底层...主动绘制 我们需要显式调用-display方法;这不同于UIView,当图层显示到屏幕上时,CALayer不会自动重绘它内容,CALayer把重绘决定权交给了开发者; 2.绘制特点 尽管没有使用...通常做法还是实现UIView-drawRect:方法,这样UIView就会自动帮我们做完剩下工作,包括需要重绘时候调用-display方法; 五、Frame与Bounds区别 我们已经知道UIView

    1.9K50

    2018 - iOS 面试题汇总一般面试题BAT面试题

    13 介绍下layoutSubview和drawRect layoutSubviews调用情况 init初始化UIView不会触发调用 addSubview会触发调用 改变viewwidth和...看情况,可能有调用 drawRect调用情况 如果UIView没有设置frame大小,直接导致drawRect不能被自动调用。...每个 UIView 内部都有一个 CALayer 在背后提供内容绘制和显示,并且 UIView 尺寸样式都由内部 Layer 所提供。...如系统会获取dyld路径,并加载。加载程序中依赖库。调用所有的+ load方法,并返回main函数地址。...如何防止拦截潜在崩溃? 答案详见:https://www.jianshu.com/p/3a50d1805655 阿里 1.dSYM你是如何分析? 2.多线程有哪几种?你更倾向于哪一种?

    6.4K30

    setNeedsDisplay看我就懂!

    前言: setNeedsDisplay异步执行。它会自动调用drawRect方法,这样可以拿到 UIGraphicsGetCurrentContext,就可以绘制了。...一般来说,使用框架控件,当您设置属性(如显示标签或值)时,您将会使用该属性,这样会导致重新绘制控件,因为系统会实现对控件drawRect方法调用。...而我们自定义了自己UIView子类,所以我们需要处理影响显示控件更新。在改变颜色情况下,当然需要我们自己控制重新绘制。...所以我们需要调用setNeedsDisplay,明确地告诉系统必须重新绘制,从而显示新颜色 由此,我们需要考虑三个重要原则: 1、在iOS中,视图很明显会被缓存。...drawRectUIView子类时,需要在需要重绘时指示给系统。

    1.3K60

    iOS CPU异步绘制流程

    为了减轻GPU负担,我们有时也需要依靠CPU来进行协助绘制,这篇文章主要讲解CPU进行异步绘制流程,部分内容摘录自iOS探索:UI视图之卡顿、掉帧及绘制原理 UIView绘制原理(CPU绘制)...UIView绘制流程以及异步绘制.png 当我们调用[UIView setNeedsDisplay]这个方法时,其实并没有立即进行绘制工作,系统会立刻调用CALayer同名方法,并且会在当前layer...drawLayer:inContext方法,如果有实现,就会创建一个空寄宿图和Core Craphics绘制上下文,为绘制寄宿图做准备,然后会在一个合适时候调用一个我们非常熟悉方法[UIView...drawRect:]来获取寄宿图内容。...[UIView drawRect:]这个方法默认是什么都不做,系统给我们开这个口子是为了让我们可以再做一些其他绘制工作 无论是哪个分支,最终都会由CALayer上传对应backing store

    73350

    iOS开发——Core Graphics绘图

    CoreGraphics也称为Quartz 2D 是UIKit下主要绘图系统,频繁用于绘制自定义视图。Core Graphics是高度集成于UIView和其他UIKit部分。...绘图就好比在画布上拿着画笔机械进行画画,通过制定不同参数来进行不同绘制。...iOS常见图形绘制 画线 画圆、圆弧、贝塞尔曲线 画矩形、椭圆形、多边形 绘制图片 绘制文字 ---- iOS绘图基础 在绘图之前,我们先来了解一下几个基本概念 context:上下文,ios绘图方法都需要传一个上下文...context,这个context在重写uiviewdrawRect方法里调用UIGraphicsGetCurrentContext()获取 path:路径,ios绘图可以想象为你拿着一支笔去画图,...//填充指定矩形中椭圆 常见图形绘制 准备工作 新建一个文件,继承UIView 重写-(void)drawRect:(CGRect)rect方法 -(void)drawRect:(CGRect

    2.5K20
    领券