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

IOS开发系列——UIView专题之三:自定义绘制篇【整理,部分原创】

3UIView重绘机制 3.1DrawRect机制 3.1.1简介 iOS的绘图操作是在UIView类的drawRect方法中完成的,所以如果我们要想在一个UIView中绘图,需要写一个扩展UIView...重绘操作仍然在drawRect方法中完成,但是苹果不建议直接调用drawRect方法,当然如果你强直直接调用此方法,当然是没有效果的。...苹果要求我们调用UIView类中的setNeedsDisplay方法,则程序会自动调用drawRect方法进行重绘。...View(如果这些View draw的时候需要用到某些变量值). 1.如果在UIView初始化时没有设置rect大小,将直接导致drawRect不被自动调用。...以上1,2推荐;而3,4不提倡 1、若使用UIView绘图,只能在drawRect:方法中获取相应的contextRef并绘图。

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

    创建简单动画(一) --- 常规hud

    先说下当前我为处理动画的思路: (新手上路, 老司机轻喷,如果有更好的实现方法请大神指教 感恩戴德) #1. 分析动画构成 #2....比较复杂的动画则考虑是否用UIBezierpath一帧帧来画 今天我们模仿做一个场景切换加载等待动画, 比如这样的 ? 我们分析下这张图的构成 #1. 一个灰色的背景 #2. 一个白色的圆环 #3....一个闭合的圆弧(白色部分) 看起来不是简单的位移动画了, 我们用UIBezierPath加CADisplayLink一帧一帧来画试试看 灰色的背景, 这个比较简单, 我们直接创建一个UIView子类,...背景颜色设置为灰色 白色的圆环, 可以用UIBezierPath直接画一个圆,注意调整线的宽度 So easy //添加外圆 UIBezierPath *apath = [UIBezierPath...然后在Controller中创建计时器, 改变_count的值达到动画的效果 上代码: 先创建一个UIView子类, #import @interface MyView

    61920

    图层树和寄宿图 -- iOS Core Animation 系列一

    CALayer类在概念上和UIView类似,也是一些被层级关系树管理的矩形块,也可以包含一些内容,并且管理子视图的位置。...但是有时候我们只使用UIView还是会有些捉襟见肘的,CALayer暴露了一些UIView没有提供的功能: 阴影、圆角、边框 3D变换 非矩形范围 透明遮罩 非线性动画 ---- 2.寄宿图 2.1...为了突出layerView的存在感,我把layerView的frame调整到CGRectMake(100, 200, 100, 150)。...本来原文是用四张不同的图做拼接,我只是展示下这种功能实现,所以偷懒只用了一张图片。...因为当图层显示在屏幕上时,CALayer不会自动重绘,这和UIView不同。需要手动调用。 我们没有调用masksToBounds。但是绘制的圆仍然被裁剪了。

    1.2K20

    【IOS开发基础系列】UIView专题

    3.在有storyboard的项目中,UIWindow是如何创建的?         为什么创建一个storyboard,没有看到创建uiwindow的过程?         ...- (CGRect)convertRect:(CGRect)rect fromView:(UIView*)view 参数 rect     一个在视图坐标系中的矩形 view     一个视图内部有矩形在他的坐标系中...    一个子视图用来移动到它後面去 setNeedsDisplay     控制接收者的边界矩形被标记为需要显示 -(void)setNeedsDisplay 讨论     默认情况下,视图几何图形的改变自动重绘而不需要调用...讨论     默认情况下,视图几何图形的改变自动重绘而不需要调用drawRect:方法。因此,你需要去请求视图重绘当视图的数据或者状态改变的时候。...苹果要求我们调用UIView类中的setNeedsDisplay方法,则程序会自动调用drawRect方法进行重绘。

    70530

    UIview

    序:本文翻译自苹果官方文档,自己想系统的了解每个控件的官方解释。只翻译了部分,详情见官方文档。 UIView UIView类定义了一个矩形区域在屏幕上和管理内容的接口。...Overview 在运行时,一个视图对象处理任何内容的呈现它的面积,还处理任何与内容交互。UIView类本身提供了基本行为与背景颜色填充的矩形区域。...的尺寸部分框架和边界矩形耦合在一起,因此改变大小的矩形更新的大小。如何使用UIView类的详细信息,看到视图iOS编程指南。...这将创建一个静态视图的可视化表示的内容可以显示在屏幕上。当视图的实际内容发生变化时,你有责任通知系统视图需要重绘。...UIView类做的大部分工作执行实际的动画,但你还必须表明哪个属性改变你想要动画。

    71710

    iOS动画-CALayer基础知识

    下面是一些UIView没有暴露出来的CALayer的功能: 设置阴影、圆角、带颜色边框 3D变换 非矩形范围 透明遮罩 多级非线性动画 二、CALyer寄宿图与contents属性 CALayer具有和...UIView一样的层级关系树,可用于显示一个矩形块。...主动绘制 我们需要显式的调用-display方法;这不同于UIView,当图层显示到屏幕上时,CALayer不会自动重绘它的内容,CALayer把重绘的决定权交给了开发者; 2.绘制特点 尽管没有使用...通常的做法还是实现UIView的-drawRect:方法,这样UIView就会自动帮我们做完剩下的工作,包括需要重绘的时候调用-display方法; 五、Frame与Bounds的区别 我们已经知道UIView...(或视图)坐标系下的点或者矩形转换为另一个图层(或视图)坐标系下的点或者矩形;开发过程中我们通常操作的对象都是视图,所以下面以视图为例简单演示其用法:首先创建添加两个宽高都是100*100的橙色、紫色视图在控制器的

    1.9K50

    Core Animation Programming

    一旦动画配置完成并启动,核心动画就能独立并完全控制相应的动画帧. 提高应用性能.应用程序只有当发生改变的时候才会重绘内容....视图在屏幕上可以是一个矩形块,它能够拦截类似鼠标点击或者触摸手势等用户交互方式. 并且在层级关系上可以互相嵌套,一个视图可以管理它所有的子视图的位置等.在开发项目过程中,这是非常常见的一个使用场景....一个我们最常用的控件,我们是否真正了解它What's CALayer CALayer 类是一个与UIView 非常类似的类. 同样也是被层级关系树管理的矩形块....为什么iOS要基于UIView 和 CALayer 提供两个平行的层级关系. 苹果为何要如此设计?为何不用一个简单的层级来处理所有的事情. 其实原因在于职责分离,这样可以避免很多重复代码....图层不能处理触摸事件,同样也要视图不能做的事情: 阴影,圆角,颜色边框 3D变换 非矩形范围 透明遮罩 多级非线性动画 CALayer's function 除了CALayer 类,CoreAnimation

    1.1K10

    《Motion Design for iOS》(四十三)

    我不能说我不认同,因为用户测试表明用户其实不太使用滑出式菜单,但可能我是一个伪君子,因为我还是在我的iPhone app Interesting中使用了一个汉堡按钮,这样看来我也是一个问题!...当然了,Pop就是用来让用户界面开发师变得精致的,所以为什么不给这个过渡加上一些动画呢? 稍微看一下我们要构建的是什么。 开始时,我们有一个圆形的黑色按钮,里面中间有一个汉堡形的线。...CGFloat sectionWidth = 80; CGFloat sectionHeight = 11; // 添加上、中、下汉堡线 self.top = [[UIView alloc] initWithFrame...self.top.layer.cornerRadius = sectionHeight/2; [self.hamburgerButton addSubview:self.top]; self.middle = [[UIView...我添加了三个UIView对象到主汉堡按钮上,每个都是白色背景的圆角矩形。它们都放置在大汉堡按钮的水平中心,并在垂直方向上分离。

    55430

    View编程指南

    View管理应用程序可见内容 view是UIView类(或其子类之一)的一个实例对象,并在应用程序window中管理矩形区域。view负责绘制内容,处理多点触控事件以及管理任何子view的布局。...这个View会重新绘制View并捕获新结果的快照。 当你的view的内容改变时,你不要直接重绘这些改变。...您可以在自定义view中重写此方法,并使用它来调整任何subview的位置和大小。 如果任何view的任何部分被标记为需要重绘,则UIKit会要求view重绘本身。...对于显式定义drawRect:方法的自定义view,UIKit调用该方法。这个方法的实现应该尽可能快地重绘view的指定区域,而不是其他的。...利用content mode content mode可以减少重绘view的时间。

    2.3K20

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

    很多UIView)刚开始的是不显示的,加载在当前的UIView上,计算每一个点的动画开始时间,达到小圆点依次作动画的效果。...透明度为0.9的白色 底部0.95的地方开始是透明度为0的白色, # 整个设置的意思是说,底部0.5比例处开始向上颜色渐变,并且是越来越白,顶部的白是0.9透明度的白色。...UIBezierPath,把这个路径拼接上X坐标轴上的两个垂直投影点形成一个底部矩形状的封闭路径,把个路径作为渐变图层的path,并绘制一条比这个UIBezierPath顶部低一点的路径作为 渐变图层的遮罩图层...在使用drawRect:重绘页面时注意首先移除已有的图层maskLayer 同时做动画。...,还有一个十字线,这个只要会画线段就会画十字线,这个也不多说了; 这些掌握了之后就可以绘制专属自己的K线图了,其他的都是一些细节小问题,CGContextRef还有很多用法,有兴趣的自己可以找度娘,接下来附上我的最终的绘制结果

    1.5K20

    图层几何学 -- iOS Core Animation 系列二

    对于图上的frame、bounds、center、postion的概念我就不赘述了。如果有不明白的自行搜索下了解一下。...frame的值实际指的是图层旋转之后整个轴对齐的矩形区域。此时frame的宽高可能和bounds的宽高不一致: ? ---- 2.锚点 默认来说,anchorPoint位于图层的中点。...这个属性没有被UIView直接暴露出来。但是图层的anchorPoint可以被移动。我们可以把anchorPoint置于图层frame的左上角。将会出现下图右侧的情况: ?...2.1 示例 为了学习这个anchorPoint属性,下面创建一个闹钟的示例demo。 资源文件我是从原文上截图下来的 ? 创建4个UIImageView并设置好约束(都是居中显示)。 ?...首先我在SB中设置两个视图,如下图: ? 如果我们不做任何操作,运行后,两个视图显示的顺序就是我们现在设置的这样。

    61630

    【带着canvas去流浪(7)】绘制水球图

    ,再加上一些y轴方向的位移偏差和颜色的差异,就可以模拟出不同的水波,接着只需要在帧动画中不断改变φ并重绘曲线,就可以模拟出水波效果了。...= A * Math.sin(w * x + theta) + offset; //绘制点 context.lineTo(x,y); } //绘制为超出水球范围的封闭图形...在绘制水波的过程中,连线完成后调用context.clip( )方法将绘图区域剪裁为所有浸水部分,此时再将填充色设置为白色,接着在同一个位置渲染文字,这样渲染出的白色文字不会超出水纹的范围,那么水纹之外的文字的蓝色部分也就被保存在画布上了...为了避免文字中白色的部分被下一层水纹绘制时截断,我们需要在每一层水纹绘制后,都重复步骤2,将该层水纹到水球底部的所有范围设置为剪裁区域,然后绘制该层水纹以内的白色文字部分,这样当几层水纹都绘制完毕后,文字淹水的部分就都会被染成白色...小结 至此,我们在这个系列中完成了所有基本图表的原生API绘制,一些相对高级的图表,其绘制过程并不一定很复杂,比如矩形树图,绘制起来实际上都是矩形方块,但却有助于我们以某种更直观更具有表现力的方式来观察数据

    1.4K00

    《Motion Design for iOS》(十五)

    从UIKit和CoreAnimation开始 通常情况下,iOS app中屏幕上的物体都是UIView对象。它们是矩形的并且有坐标和大小来定义它们在屏幕上的位置和尺寸。...UIView是用来构建你的界面的UIKit Framework中基本的界面对象。每个视图都可能伴随着文本、形状或图片绘制。...你也可以通过绘制任何你想要的东西来完全自定义UIView。 这是我的app Interesting for iPhone的截屏和界面中一些视图的分解。...一个UIView本质上是一个包含内部图形的矩形。在屏幕上布局,靠近或在其他视图的顶部,还可能会有高级的透明效果来整合到一起或者快速绘制。...像你想象的一样,让大量的视图在屏幕上移动确实是一个挑战,尤其是在一个小的,低功率的设备上。 这就是为什么苹果公司开发了Core Animation。

    85640

    iOS点击TableView的cell显示弹出动画

    cell还亮着,然后有一点点的放大效果,同时cell的界面在慢慢变成纯白色,最后上下炸开进入内容界面,其实仔细想想,这个和3D Touch的peek效果的前奏不是很像嘛。...我们这里需要额外用到三个小vied,一个是背景的阴影view,一个是点击的cell的view,一个是cell慢慢变成的纯白色view(最后炸开的也是这个纯白的view)。...,为什么呢?...动画是使用的最基本的UIView动画,教程可以看我这篇博客,使用起来还是很方便的,延迟执行我用的GCD的方法,也可以用别的你熟悉的方式。...要注意的是我们不能直接使用点击到的cell的位置,经测试直接用他的原点会变成(0, 0),也就是出现在左上角,我也不知道为什么,所以这里要先获取对应的区域来更改cell的范围并作为纯白view的范围。

    1.5K10

    【Flutter 组件集录】CupertinoActivityIndicator| 8月更文挑战

    在很久以前,对于那时还只会 setState 触发画板重绘,我一直对这种方式有疑问,因为 setState 更新画板会让画板对象重新创建,这对于绘制动画来说是很不友好的,因为触发的频率非常高。...具体的绘制逻辑也很简单,就是遍历旋转绘制圆角矩形而已。 4....如下,在暗色模式下,会略显白色。如果我们想要自己定义的组件支持 暗/亮 模式,也可以效仿一下,进行处理。 三、CupertinoActivityIndicator 的注意点 有一个注意点。...也能有人会非常疑惑,明明 BoxPainter 不需要重绘,为什么会一直绘制, CupertinoActivityIndicator 太垃圾了。...在同一片渲染区域内的一个节点重绘,会连带这片区域的所有渲染节点重绘。

    1K30
    领券