【绘图案例-图形上下文栈 Objective-C语言】

一、接下来,我们来说这个“图形上下文栈”

通知

1.我们还是把之前的copy这份儿代码复制一下,改个名字,叫做“02-图形上下文栈”,

通知

好,我们把刚才那个圆形拿过来,那条线也拿过来,用CGContextAdd:这种方式,

通知

把第一步,获取当前上下文,也拿过来,第三步,渲染,也拿过来,

通知

打开注释,

通知

接下来,我们把这个跑一下,应该是一个斜线,再加一个圆圈儿,

通知

是这么一个图形啊,把这个线宽也改一下,改成10,

通知

CGContextSetLineWidth(ctx,10);

然后呢,把颜色也改一下,来一个红色的,

[[UIColor redColor] set];

通知

command + R,

通知

我现在画了这么一个图形,我现在接下来,想怎么做,假如说,

通知

左边是我的UIView,右边呢,是我的上下文,

通知

然后,我在上下文里边画东西,当我渲染的时候,我是把这条线,移过来,

通知
通知

也就是说,上下文还在,只不过,上下文里边的路径,没有东西了,

然后呢,我们说,上下文里边,不仅有路径,有输出的目标,也就是这个UIView,还有什么,还有绘图的状态,绘图的状态信息啊,就是说,这个红色啊,线宽,这些东西,都是状态信息,这个上下文还在,也就意味着,你的状态信息,实际上,也还在,虽然你这一次渲染了,渲染,只不过是把路径拿走了,那么,你的绘图信息还在呢,也就是说,我现在在后面这一块儿啊,已经渲染完了,

通知

那我可以在后面,再画一条线,先MoveToPoint,

CGContextMoveToPoint(ctx,20,20);

通知

然后,再往(250,20)画一条线,

CGContextAddLineToPoint(ctx,250,20);

通知

然后呢,再来一个渲染,

// 渲染

CGContextStrokePath(ctx);

command + R,

通知

这个时候呢,我又在这个位置上,多画了一条线,每一次渲染的时候,仅仅是把路径,移到了输出目标上了,但是,你的上下文,还在的,

通知

这张草稿纸,还在的,那你接着往草稿纸上画东西,然后,再去渲染,是没问题的,那,接下来,我要干什么,

3.我现在想呢,画第二条线的时候,换一个样式,比如说,我们就用默认的样式,我们想用这种黑色的,一像素的线,来画最后的这条线,

通知

这个里边呢,我们就要涉及到“图形上下文栈”这个东西了,

首先,它是一个“栈”的结构,一会儿我们再来说“栈”的结构,

然后,在这个里边啊,思路是什么,首先,如果我们不设置这些颜色的话,

通知

不设置颜色,不设置线宽,的话,那么,我们肯定画出来的都是1像素、黑色的线,

通知

这肯定是一种样式,也就是说,这种样式信息,都是在上下文里边的,

那我创建出来的第一个上下文,哦,不是创建出来啊,我第一个获取到的这个上下文,是不是这个状态信息就是黑色的1像素的线,

通知

当前,我们获取到的这个上下文,它默认的这个信息,就是黑色的1像素的线,然后呢,我们现在干什么,我们现在把这个上下文里边的状态信息,把它备份一下&#

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/785270.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

买婴儿洗衣机怎么选择?四款优良婴儿洗衣机极力推荐

由于刚出生没多久的宝宝的肌肤相对来说会比较娇嫩,因此普遍的宝宝衣物都是采用纯棉材质,所以对于宝宝的衣服要特殊呵护,要求有无菌、无刺激的清洗环境。然而婴儿专用的洗衣机就应运而生!婴儿洗衣机的优点很多,一是省时…

从 Azure 部署生成本地 .NET 密钥

作者:Frank Boucher 排版:Alan Wang 通常,示例项目以一些“魔术字符串”开始,这些变量包含与部署或外部资源相关的 URL 和关键信息,我们必须更改这些信息才能使用示例。例如在 .NET 中,它可能如下所示&…

Android 开发投屏软件

一、背景 作为Android开发总会有给他人share自己APP情况,一般在线会议投屏,总是需要在手机上安装对应会议软件特别麻烦~ 二、投屏 Android Studio已经自带了投屏能力,可以在电脑端直接控制手机,同步起来非常方便简单 打开步骤 …

linux ubuntu 在保存文件不被允许,但是root权限

现象:MobaXterm_Personal_2登录到服务器,切换到root用户,然后使用MobaXterm_Personal_2自带的编辑器,编写文件,进行保存不被允许;查看目录root是有权限进行修改文件的,然后使用vim进行修改保存&…

阿里云OSS, 跨域请求, No ‘Access-Control-Allow-Origin‘

问题 阿里云OSS, 跨域请求, No ‘Access-Control-Allow-Origin’ 错误标签:阿里云OSS, 跨域请求, No ‘Access-Control-Allow-Origin’ 浏览器具体报错内容: Access to XMLHttpRequest at ‘https://xxx.oss-cn-guangzhou.aliyuncs.com/xxx.jpg’ from …

LLM - Weight-Decomposed Low-Rank Adaptation 之 DoRA

目录 Abstract 1.Introduce 2.Related Works 2.1 Parameter-Efficient Fine-Tuning (PEFT) 2.2 LoRA (Hu et al., 2022) and its variants 3.Pattern Analysis of LoRA and FT 3.1 Low-Rank Adaptation (LoRA) 3.2. Weight Decomposition Analysis 4.Method 4.1. Wei…

在react项目用echarts绘制中国地图

文章目录 一、引入echarts二、下载地图json数据三、编写react组件四、组件使用 一、引入echarts 安装:npm i echarts --save 二、下载地图json数据 由于echarts内部不再支持地图数据,所以要绘制地图需要自己去下载数据。建议使用阿里云的。 地址&…

Chrome 设置在新窗口中打开链接(已登录google账号版)

Chrome的链接默认是在原标签页中打开的,如果要在新窗口中打开,需要自己自行设置,在此,针对已经登录google账号的chrome浏览器怎么进行设置进行说明。 一、点击登录图标->更多设置 二、选择其他设置->在新窗口中打开搜索结果…

砍树c++

题目&#xff1a; 代码&#xff1a; #include<bits/stdc.h> using namespace std; long long n,m,a[100000005]; bool jltm(int x){long long sum0;for(int i1;i<n;i){if(a[i]>x) sumsuma[i]-x;}//计算此时锯片高度砍掉的木材if(sum>m) return 1;else return 0…

怎么在UE游戏中加入原生振动效果

我是做振动触感的。人类的五感“视听嗅味触”&#xff0c;其中的“触”就是触觉&#xff0c;是指皮肤、毛发与物体接触时的感觉。触感可以带来更加逼真的沉浸式体验。但也许过于司空见惯&#xff0c;也是习以为常&#xff0c;很多人漠视了触感的价值。大家对触感的认知还远远不…

Oracle19c ADG搭建

文章目录 一、环境配置1、主机环境2、host文件配置 二、主库配置1、 开启归档2、redo日志3、修改参数文件4、配置TNS文件5、静态监听6、拷贝密码文件 三、备库配置1、开启归档2、redo日志3、修改参数文件4、配置TNS文件5、配置静态监听 四、构建DG1、验证监听2、主库登入rman&a…

排序——选择排序(直接选择排序和堆排)

本专栏和大家分享关于排序的算法,其中有插入排&#xff08;直接插入排序和希尔排序&#xff09;、选择排序&#xff08;直接选择排序和堆排&#xff09;、交换排序&#xff08;冒泡排序和快速排序&#xff09;、归并排序以及其他非基于比较的排序 本文与大家分享选择排序 目录 …

【pytest、playwright】多账号同时操作

目录 方案实现思路&#xff1a; 方案一&#xff1a; 方案二&#xff1a; 方案实现思路&#xff1a; 依照上图所见&#xff0c;就知道&#xff0c;一个账号是pytest-playwright默认的环境&#xff0c;一个是 账号登录的环境 方案一&#xff1a; 直接上代码&#xff1a; imp…

Tensorflow2.0笔记 - 自定义Layer和Model

本笔记主要记录如何在tensorflow中实现自定的Layer和Model。详细内容请参考代码中的链接。 import time import tensorflow as tf from tensorflow import keras from tensorflow.keras import datasets, layers, optimizers, Sequential, metricstf.__version__ #关于自定义l…

JRT业务开发起步

这是一段充满挑战与奋斗的旅程&#xff0c;自第一行Java代码的写下起&#xff0c;便历经重重险阻。从细微的代码行&#xff0c;逐步汇聚成实用的工具类方法&#xff1b;从工具类方法的积累&#xff0c;逐渐构建起功能强大的工具包&#xff1b;再从工具包的整合&#xff0c;最终…

走进标杆企业——成套数字化标杆观摩游学(重庆站)

为了推进工业电气加工与设计的效率提升&#xff0c;加快企业数字化、网络化和智能化管理的步伐&#xff0c;利驰软件(苏州)有限公司&#xff08;下文简称利驰软件&#xff09;在重庆于2024年3月22日举办了一场成套数字化标杆观摩游学。此次为期一天的活动吸引了湘鄂渝地区专家们…

视频素材下载哪个软件好?几个素材库视频免费下载

在浩瀚的创意海洋中&#xff0c;找到完美的无水印视频素材犹如寻宝一般&#xff0c;每一段精彩的视频片段都能为您的作品增色不少。无论您是视频制作新手&#xff0c;还是经验丰富的专业人士&#xff0c;这里有全球各地的精选视频素材网站&#xff0c;旨在激发您的灵感&#xf…

EfficientSAM 项目排坑

EfficientSAM 项目排坑 任务过程记录创建环境运行示例 任务 跑通这个项目代码 过程记录 创建环境 readme里没有说具体怎么配置环境&#xff0c;所以可能对我来说还挺困难的。 现把项目git下来&#xff1a; git clone https://github.com/yformer/EfficientSAM.git cd Effi…

Flask Python:请求上下文和应用上下文

请求上下文和应用上下文详解 一、背景二、什么是上下文2.1、请求上下文2.2、应用上下文2.3、两种上下文的底层逻辑 三、写在最后 一、背景 在如何实现异步发送邮件的时候&#xff0c;遇到过这样一个报错 RuntimeError: Working outside of request context.This typically me…