[iOS]绘图、写字(重写UIView)

2024-08-20 23:58
文章标签 重写 绘图 ios uiview 写字

本文主要是介绍[iOS]绘图、写字(重写UIView),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

绘图、写字(重写UIView)

Demo:http://download.csdn.net/detail/u012881779/8667943

1.创建一个继承于UIView的类:DrawView

2.创建一个继承于UIViewController的类:ViewController

再在ViewController的Xib中添加UIView控件,设置UIView继承于DrawView


#import <UIKit/UIKit.h>@interface DrawView : UIView
@property (strong, nonatomic) NSMutableArray *mArrPoint;
@property (strong, nonatomic) NSMutableArray *savePoint;
@property (strong, nonatomic) NSMutableArray *displayPoint;
@property (strong, nonatomic) NSValue *lastValue;// 清空画布
- (void)cleanDrawView;@end#import "DrawView.h"@implementation DrawView
@synthesize mArrPoint = _mArrPoint;
@synthesize savePoint = _savePoint;
@synthesize displayPoint = _displayPoint;
@synthesize lastValue = _lastValue;- (id)initWithFrame:(CGRect)frame {self = [super initWithFrame:frame];if (self) {// Initialization code}return self;
}- (void)drawRect:(CGRect)rect {// 存储点不为空时往下执行if (_mArrPoint) {// 1.绘图上下文CGContextRef context = UIGraphicsGetCurrentContext();/*从UI上取得当前笔画,并存储1)、把组成每一笔画的点存储在一个数组(savePoint)2)、再把每一画打包成一个对象,存储到另一个数组(displayPoint)*/if (!_savePoint) {_savePoint = [[NSMutableArray alloc] init];}_savePoint = _mArrPoint;if (!_displayPoint) {_displayPoint = [[NSMutableArray alloc] init];}[_displayPoint addObject:_savePoint];// 2.连接各点构成线,双重循环for (int i = 0 ; i < [_displayPoint count] ; i ++) {NSMutableArray *tempArr = [_displayPoint objectAtIndex:i];// 书写每一笔画时,重新设置起始点CGPoint startPoint = [[tempArr objectAtIndex:0 ] CGPointValue];CGContextMoveToPoint(context, startPoint.x, startPoint.y);for (int j = 0 ; j < [tempArr count] ; j ++) {CGContextAddLineToPoint(context,[[tempArr objectAtIndex:j] CGPointValue].x,[[tempArr objectAtIndex:j] CGPointValue].y);}}// 3设置画笔属性,宽度,颜色[[UIColor greenColor] set];CGContextSetLineWidth(context, 5);CGContextStrokePath(context);}
}// 清空画布
- (void)cleanDrawView {_mArrPoint = nil;_savePoint = nil;_displayPoint = nil;[self setNeedsDisplay];
}#pragma mark UIResponder
// 开始触摸
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {_mArrPoint = nil;NSLog(@"touchesBegan");
}// 触摸移动,不断监听一次有效的Touch移动
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {if (!_mArrPoint) {_mArrPoint = [[NSMutableArray alloc] init];}CGPoint touchPoint = [[touches anyObject] locationInView:self];[_mArrPoint addObject:[NSValue valueWithCGPoint: touchPoint]];[self setNeedsDisplay];NSLog(@"touchesMoved");
}// 触摸事件结束
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {NSLog(@"touchesEnded");
}// 触摸事件 取消,比如来电话打断
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {NSLog(@"touchesCancelled");
}/*而这几个方法被调用时,正好对应了UITouch类中phase属性的4个枚举值。上面的四个事件方法,在开发过程中并不要求全部实现,可以根据需要重写特定的方法。对于这4个方法都有两个相同的参数:NSSet类型的touches和UIEvent类型的event。其中touches表示触摸产生的所有UITouch对象,而event表示特定的事件。因为UIEvent包含了整个触摸过程中所有的触摸对象因此可以调用allTouches方法获取该事件内所有的触摸对象,也可以调用touchesForVIew:或者touchesForWindows:取出特定视图或者窗口上的触摸对象。在这几个事件中,都可以拿到触摸对象然后根据其位置,状态,时间属性做逻辑处理。*/@end
示图:








这篇关于[iOS]绘图、写字(重写UIView)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

AI绘图怎么变现?想做点副业的小白必看!

在科技飞速发展的今天,AI绘图作为一种新兴技术,不仅改变了艺术创作的方式,也为创作者提供了多种变现途径。本文将详细探讨几种常见的AI绘图变现方式,帮助创作者更好地利用这一技术实现经济收益。 更多实操教程和AI绘画工具,可以扫描下方,免费获取 定制服务:个性化的创意商机 个性化定制 AI绘图技术能够根据用户需求生成个性化的头像、壁纸、插画等作品。例如,姓氏头像在电商平台上非常受欢迎,

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

【iOS】MVC模式

MVC模式 MVC模式MVC模式demo MVC模式 MVC模式全称为model(模型)view(视图)controller(控制器),他分为三个不同的层分别负责不同的职责。 View:该层用于存放视图,该层中我们可以对页面及控件进行布局。Model:模型一般都拥有很好的可复用性,在该层中,我们可以统一管理一些数据。Controlller:该层充当一个CPU的功能,即该应用程序

matplotlib绘图中插入图片

在使用matplotlib下的pyplot绘图时,有时处于各种原因,需要采用类似贴图的方式,插入外部的图片,例如添加自己的logo,或者其他的图形水印等。 一开始,查找到的资料都是使用imshow,但是这会有带来几个问题,一个是图形的原点发生了变化,另外一个问题就是图形比例也产生了变化,当然最大的问题是图形占据了整个绘图区域,完全喧宾夺主了,与我们设想的只在绘图区域中占据很小的一块不相符。 经

海龟绘图简易教程|Turtle for Python

turtle 是 python 内置的一个比较有趣味的模块,俗称 海龟绘图,它是基于 tkinter 模块打造,提供一些简单的绘图工具,海龟作图最初源自 20 世纪 60 年代的 Logo 编程语言,之后一些很酷的 Python 程序员构建了 turtle 库,让其他程序员只需要 import turtle,就可以在 Python 中使用海龟作图。 原文链接|海龟绘图简易教程 1. 基本

GraphPad Prism 10 for Mac/Win:高效统计分析与精美绘图的科学利器

GraphPad Prism 10 是一款专为科研工作者设计的强大统计分析与绘图软件,无论是Mac还是Windows用户,都能享受到其带来的便捷与高效。该软件广泛应用于生物医学研究、实验设计和数据分析领域,以其直观的操作界面、丰富的统计方法和多样化的图表样式,成为科学研究的得力助手。 数据处理与整理 GraphPad Prism 10 支持从多种数据源导入数据,如Excel、CSV文件及数据库

iOS剪贴板同步到Windows剪贴板(无需安装软件的方案)

摘要 剪贴板同步能够提高很多的效率,免去复制、发送、复制、粘贴的步骤,只需要在手机上复制,就可以直接在电脑上 ctrl+v 粘贴,这方面在 Apple 设备中是做的非常好的,Apple 设备之间的剪贴板同步功能(Universal Clipboard)确实非常方便,它可以在 iPhone、iPad 和 Mac 之间无缝传输剪贴板内容,从而大大提高工作效率。 但是,iPhone 如何和 Wind

MATLAB绘图基础5:MATLAB数据导入

参考书:《 M A T L A B {\rm MATLAB} MATLAB与学术图表绘制》(关东升)。 5.MATLAB数据导入 5.1 从CSV文件读取数据 C S V {\rm CSV} CSV文件是一种纯文本文件,文件中的数据以逗号为分隔符进行字段分隔,每一行数据代表一条记录,每个字段在该行内通过逗号进行分隔; C S V {\rm CSV} CSV文件可以使用任何文本

WPF入门到跪下 第十三章 3D绘图 - 3D绘图基础

3D绘图基础 四大要点 WPF中的3D绘图涉及4个要点: 视口,用来驻留3D内容3D对象照亮部分或整个3D场景的光源摄像机,提供在3D场景中进行观察的视点 一、视口 要展示3D内容,首先需要一个容器来装载3D内容。在WPF中,这个容器就是Viewport3D(3D视口),它继承自FrameworkElement,因此可以像其他元素那样在XAML中使用。 Viewport3D与其他元素相