ios 画图 绘图的实现(自由批注中视图的subview的实现)bitmap Quartz 2D 缓存位图 自由批注功能的实现 如何实现在view上自由绘图 提供源码
2012-03-06 14:15
1026 查看
代码结构:
一。在视图控制器(viewController)中实现绘图视图中控件的实现方法,比如;选择颜色,选择橡皮,选择线条粗细等等,方法调用视图控制器所绑定的view的方法,
二。在视图中(view)加入触摸的起始点、终点、代理,线条粗细,颜色的成员并重写
- (void)drawRect:(CGRect)rect
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
方法中相关的方法委托代理进行实现。例如touchMoved的代码
SCStrokeImp* stroke2 = (SCStrokeImp*)strokeDelegate;//先对代理类的成员进行强制类型转换,以便能识别其中的方法
stroke2.flag =self.flag; //橡皮实现中的flag判断是绘制还是擦除
UITouch *touch = [touchesanyObject];
lastTouch = [touchlocationInView:self]; //获取mov终点坐标
[strokeDelegatestrokeView:selfdrawLineFrom:firstTouchandTo:lastTouch];//把绘图的实现扔给代理类进行实现
firstTouch =lastTouch; //终点=起点,准备绘制下一条线段
[selfsetNeedsDisplay]; //对绘制的图形进行展示
三。在代理类中实现的方法
-(CGContextRef)CreateBitmapContextwithWidth:(int)aWidth
andHeight:(int)aHeight; //创建一个缓存位图,实现对划线的记忆
-(void)strokeView:(SCStrokeView*)aView (1)
drawLineFrom:(CGPoint)aStart
andTo:(CGPoint)aEnd; //视图调用的划线方法,含有被代理者本身作为参数,以便获得被代理者当前的状态
-(void)updateView:(SCStrokeView*)aView withContext:(CGContextRef) context; //更新当前view
- (void) drawLineFrom:(CGPoint)aStart andTo:(CGPoint)aEnd; //1获取到位置,线条宽度和颜色以后调用的实际划线的方法
- (CGFloat)getStepWidth:(CGFloat)aBeginWidth
andEndWidth:(CGFloat)aEndWidth
andDistance:(CGFloat)aDistance
andStepLength:(CGFloat)aLength;
- (CGFloat)getDistanceFrom: (CGPoint)aStart
andTo: (CGPoint)aEnd;
- (NSMutableArray*)getPointSetWithFrom:(CGPoint)aStart
andTo:(CGPoint)aEnd;
- (CGFloat)getLineSlopeWithFrom:(CGPoint)aStart
andTo:(CGPoint)aEnd; //这四个函数负责对线条进行优化,消除锯齿
四。在接口中声明的方法(代理服从改接口)
-(void)strokeView:(SCStrokeView*)aView
drawLineFrom:(CGPoint)aStart
andTo:(CGPoint)aEnd;
-(void)updateView:(SCStrokeView*)aView withContext:(CGContextRef) context;
//这两个方法在view中被调用,所以想要成为view的代理,必须实现这两个方法
关于自由批注的其他代码 参考我其他的帖子 需要源码请留言
代码地址
http://dl.dbank.com/c0gys4jhay
一。在视图控制器(viewController)中实现绘图视图中控件的实现方法,比如;选择颜色,选择橡皮,选择线条粗细等等,方法调用视图控制器所绑定的view的方法,
二。在视图中(view)加入触摸的起始点、终点、代理,线条粗细,颜色的成员并重写
- (void)drawRect:(CGRect)rect
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
方法中相关的方法委托代理进行实现。例如touchMoved的代码
SCStrokeImp* stroke2 = (SCStrokeImp*)strokeDelegate;//先对代理类的成员进行强制类型转换,以便能识别其中的方法
stroke2.flag =self.flag; //橡皮实现中的flag判断是绘制还是擦除
UITouch *touch = [touchesanyObject];
lastTouch = [touchlocationInView:self]; //获取mov终点坐标
[strokeDelegatestrokeView:selfdrawLineFrom:firstTouchandTo:lastTouch];//把绘图的实现扔给代理类进行实现
firstTouch =lastTouch; //终点=起点,准备绘制下一条线段
[selfsetNeedsDisplay]; //对绘制的图形进行展示
三。在代理类中实现的方法
-(CGContextRef)CreateBitmapContextwithWidth:(int)aWidth
andHeight:(int)aHeight; //创建一个缓存位图,实现对划线的记忆
-(void)strokeView:(SCStrokeView*)aView (1)
drawLineFrom:(CGPoint)aStart
andTo:(CGPoint)aEnd; //视图调用的划线方法,含有被代理者本身作为参数,以便获得被代理者当前的状态
-(void)updateView:(SCStrokeView*)aView withContext:(CGContextRef) context; //更新当前view
- (void) drawLineFrom:(CGPoint)aStart andTo:(CGPoint)aEnd; //1获取到位置,线条宽度和颜色以后调用的实际划线的方法
- (CGFloat)getStepWidth:(CGFloat)aBeginWidth
andEndWidth:(CGFloat)aEndWidth
andDistance:(CGFloat)aDistance
andStepLength:(CGFloat)aLength;
- (CGFloat)getDistanceFrom: (CGPoint)aStart
andTo: (CGPoint)aEnd;
- (NSMutableArray*)getPointSetWithFrom:(CGPoint)aStart
andTo:(CGPoint)aEnd;
- (CGFloat)getLineSlopeWithFrom:(CGPoint)aStart
andTo:(CGPoint)aEnd; //这四个函数负责对线条进行优化,消除锯齿
四。在接口中声明的方法(代理服从改接口)
-(void)strokeView:(SCStrokeView*)aView
drawLineFrom:(CGPoint)aStart
andTo:(CGPoint)aEnd;
-(void)updateView:(SCStrokeView*)aView withContext:(CGContextRef) context;
//这两个方法在view中被调用,所以想要成为view的代理,必须实现这两个方法
关于自由批注的其他代码 参考我其他的帖子 需要源码请留言
代码地址
http://dl.dbank.com/c0gys4jhay
相关文章推荐
- ios 自由批注功能的实现 如何实现在view上自由绘图 bitmap Quartz 2D 缓存位图
- ios 绘图 橡皮 的实现办法 自由批注橡皮的实现办法 缓存位图橡皮的实现办法 bitmap Quartz 2D 缓存位图
- iOS如何实现网页缓存(实现webView的缓存)
- 如何在IOS中使用实现Android view.gone 功能(swift版)cell(两种不同的布局)
- iOS开发中Quartz2D绘图路径的使用以及条纹效果的实现
- iOS开发中使用Quartz2D绘图及自定义UIImageView控件
- iOS开发的一些小技术:让UIImage有缩放功能、控制log的输出、xcode修改文件注释、随机数的使用、在UIImageView 中旋转图像、在Quartz中如何设置旋转点、创建.plist文件并存储
- ios 如何移除全部subview和判断子视图是否加上
- iOS中如何实现TextView仅可粘贴不可输入的功能
- iOS 2D绘图详解(Quartz 2D)之Bitmap
- 【IOS 开发学习总结-OC-66】Quartz 2D绘图(4-3)——绘制曲线+在内存中绘图+绘制位图
- iOS 2D绘图详解(Quartz 2D)之Bitmap
- (素材源码)猫猫学IOS(三十四)UI之Quartz2D画画板的实现
- iOS 用Quartz2D实现图片水印,裁剪,连线等功能
- (素材源码)猫猫学IOS(三十四)UI之Quartz2D画画板的实现
- 进击的KFC:iOS WebView 如何通过js获取网页中所有图片并加入点击事件,实现浏览图片的功能
- iOS WebView 如何通过js获取网页中所有图片并加入点击事件,实现浏览图片的功能
- 在iOS开发的Quartz2D使用中实现图片剪切和截屏功能
- [ios]quartz2d画板功功能实现核心代码
- iOS开发UI-利用Quartz2D 实现基本绘图(画三角形、矩形、圆、圆弧)