自制画板

2024-04-22 03:58
文章标签 画板 自制

本文主要是介绍自制画板,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

效果



重点代码

@implementation GSDrawFunView
{NSMutableArray * mShapeLayerArray; // 总layer数组,里面有好多线,每条线由下面数组组成NSMutableArray * mCurrentShapeLayerArray; // 当前画的线的layer数组NSMutableArray * mBezierPathArray; // 所有path数组UIColor * mCurrentColor;UIView * mDrawBoardView;
}

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{UITouch * touch = [touches anyObject];CGPoint point = [touch locationInView:self];//控制画板位置,防止线画出画板if (point.x < mDrawBoardView.x  || point.y < mDrawBoardView.y || point.x > CGRectGetMaxX(mDrawBoardView.frame) || point.y > CGRectGetMaxY(mDrawBoardView.frame)){return;}//每条线开始画都要初始化pathUIBezierPath *  currentBezierPath = [[UIBezierPath alloc]init];[currentBezierPath moveToPoint:point];[mBezierPathArray addObject:currentBezierPath];//每条线开始画都要初始化layer数组mCurrentShapeLayerArray = [[NSMutableArray alloc]init];}
-(void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{UITouch * touch = [touches anyObject];CGPoint point = [touch locationInView:self];if (point.x < mDrawBoardView.x  || point.y < mDrawBoardView.y || point.x > CGRectGetMaxX(mDrawBoardView.frame) || point.y > CGRectGetMaxY(mDrawBoardView.frame)){return;}UIBezierPath * currentBezierPath = [mBezierPathArray lastObject];[currentBezierPath addLineToPoint:point];CAShapeLayer * currentLayer = [[CAShapeLayer alloc]init];currentLayer.path = currentBezierPath.CGPath;currentLayer.fillColor = nil;currentLayer.strokeColor = mCurrentColor.CGColor;currentLayer.lineJoin = kCALineJoinRound; //终点currentLayer.lineCap = kCALineCapRound; //拐角currentLayer.lineWidth = 2;[self.layer addSublayer:currentLayer];[mCurrentShapeLayerArray addObject:currentLayer];}
-(void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{//每条线画完,都要添加到layer数组里[mShapeLayerArray addObject:mCurrentShapeLayerArray];
}//改变画笔颜色
-(void)changeColorForPaintBrushWithColor:(UIColor *)color
{mCurrentColor = color;}
//撤销
-(void)remokeLineAction
{//删除pathUIBezierPath * lastBezierPath = [mBezierPathArray lastObject];[lastBezierPath removeAllPoints];[mBezierPathArray removeLastObject];//删除layerNSArray * lastShapeLayerArray = [mShapeLayerArray lastObject];[mShapeLayerArray removeLastObject];for (CAShapeLayer * layer in lastShapeLayerArray) {[layer removeFromSuperlayer];}}


这篇关于自制画板的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/924768

相关文章

github有趣项目:renpy自制“剧情游戏”

之前的剧情游戏《完蛋!我被美女包围了》很是火热,一度登上Steam热销榜第一。Ren’Py(https://github.com/renpy/renpy) 是一个可视小说引擎,可以快速方便的制作类似剧情游戏。它是一个免费的游戏引擎,支持多端运行打包。支持3D镜头移动(是对于二维堆叠图像的,好像还不支持三维模型),Live2D等功能。支持的音频格式:Opus、Ogg Vorbis、MP3、MP2、F

自制efficientnet网络

用到的技术cnn,残差连接,全局池化注意力机制,点卷积切换通道,深度卷积提取空间特征 import os os.environ["KERAS_BACKEND"] = "tensorflow"  # @param ["tensorflow", "jax", "torch"] os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' import matplotlib.pyp

【读书笔记-《30天自制操作系统》-14】Day15

本篇内容开始讲解多任务。本篇内容结构很简单,先讲解任务切换的原理,再讲解任务切换的代码实践。但是涉及到的知识不少,理解上也有些难度。 1. 任务切换与多任务原理 1.1 多任务与任务切换 所谓多任务,指的是操作系统同时运行多个任务。但是这种说法实际上是不准确的。如果只有一个CPU,是无法事实上实现同时运行多个任务的。而之所以给用户以多个任务在同时运行的错觉,其实是因为多个任务之间在快速地

【读书笔记-《30天自制操作系统》-13】Day14

相比前几篇的内容,本篇不仅内容更为简单,而且与显示相关,更为有趣。首先通过调用VBE的显示模式提高显示画面的分辨率,然后分别实现按下键盘按键显示对应的字符,以及通过鼠标移动窗口。因为是以前面讲过的很多内容为基础,程序代码很简单,而且能切实看到成果,也更有趣。 1. 提高画面分辨率 现在要把显示画面的分辨率提高到640x480,就又要修改BIOS的画面模式设定所用的汇编语言代码了。 ; 设定

自制实战吃鸡手柄原理

在前面的讨论中,通过类似物理点击的方式来实现了声控触发射击键的点击 【Arduino】自制声控点击器(吼叫吃鸡助手)_辅助机械臂物理物理键盘点击器神器-CSDN博客 为了更有实战效果,我们可以把玩具枪改造为一个手柄,这样操作更加方便, 枪形手柄使用蓝牙来进行连接,发送操作指令。还可以安装一个陀螺仪传感器在上面,控制画面的转动,瞄准键也可以设置一个按钮。 有2种方案来进行控制, 1

使用自制COCO数据集进行PaddleDetection模型训练

本次模型训练基于百度飞浆的Baseline: 19届智能车百度创意组识别 - 飞桨AI Studio星河社区 (baidu.com) 一、收集数据及数据处理 用摄像头拍摄实物,这里先选用baseline中给好的数据集。创建VOC文件夹,文件夹里包含Annotations和JPEGImages两个文件夹。需要进行标注操作的图片将会放在JPEGImages文件夹里,标注生成的xml文件将会放

【读书笔记-《30天自制操作系统》-12】Day13

本篇的内容仍然是定时器的相关讲解。上一篇内容中对于中断程序做了许多优化,但是这些优化到底起了多少作用呢?本篇用一种测试方法来进行测试。然后本篇继续引入链表与哨兵的概念,进一步加快超时的中断处理。 1. 主程序简化 开发过程到了这一步,程序的代码量已经不少了。但其中其实有很多重复和可以简化的地方。 比如在显示窗口的时候多次出现了如下代码: boxfill8(buf_win, 160, C

【读书笔记-《30天自制操作系统》-10】Day11

本篇内容继续围绕显示展开。首先对鼠标显示做了些优化,鼠标箭头在到达画面边缘时能够实现部分隐藏;接下来制作了窗口,实现了窗口显示;最后还在窗口的基础上实现了计数器,显示计数的变化并消除闪烁的问题。 1. 画面边缘隐藏部分鼠标 首先优化一下鼠标显示,在鼠标箭头移动到画面边缘时,隐藏部分鼠标箭头。主程序中原代码如下: if (mx > binfo->scrnx - 16) {mx = binf

python为在线漫画网站自制非官方API(未完待续)

接下来将记录我一步一步写一个非官方API的过程,因为一些条件的约束,最后的成品可能很粗暴简陋 现在介绍要准备的所有工具: 系统:ubuntu 14.04 语言:python 2.7 需要自行安装的库:flask,BeautifulSoup4,requests,selenium,pinyin,phantomjs-1.9.8 服务器:Sina App Engine 因为成本原因我选择了Si

自制搜索(elasticsearch安装,mongo-connector同步数据,python操作)

做一个搜索,以es为基础,数据存在mongodb 1:Elasticsearch 下载: elasticsearch下载地址https://www.elastic.co/downloads/elasticsearch 安装: 修改elasticsearch-5.5.1/config/elasticsearch.yml # 集群名称cluster.name: myElast