涂鸦之贝赛尔

代码如下

@interface JFpaintView ()

@property (nonatomic ,strong)NSMutableArray *totalPathPoints;
@property (nonatomic, strong)NSMutableArray *paths;

@end
@implementation JFpaintView
//清除
-(void)clear{
    [self.paths removeAllObjects];
    [self setNeedsDisplay];

}
//后退
-(void)back{
    [self.paths removeLastObject];
    [self setNeedsDisplay];

}

/**
 *  懒加载
 *
 *  @return 返回一个路径
 */
-(NSMutableArray *)paths{
    if (_paths == nil) {
        _paths = [NSMutableArray array];
    }
    return _paths;
}

-(NSMutableArray *)totalPathPoints{
    if (_totalPathPoints == nil) {
        _totalPathPoints = [NSMutableArray array];
    }return _totalPathPoints;
}
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
//取出遍历所有路径
- (void)drawRect:(CGRect)rect {
    for (UIBezierPath *path  in self.paths) {
        path.lineWidth = 10;
        [path stroke];
    }

}

/**
*  起点
*
*/
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    //1.获取当前的触摸点
    UITouch *touch =  [touches anyObject];
    CGPoint startPos =  [touch locationInView:touch.view] ;
    //2.创建一个新的路径
    UIBezierPath *currenPath = [UIBezierPath bezierPath];
    线条的类型
    currenPath.lineCapStyle = kCGLineCapRound;
    currenPath.lineJoinStyle = kCGLineJoinRound;

    //3.设置起点
    [currenPath moveToPoint:startPos];

    //4.添加数组到数组中
    [self.paths addObject:currenPath];

    //5.开始展示
    [self setNeedsDisplay];

}
/**
 *  连线
 *
 */
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
    UITouch *touch = [touches anyObject];
    CGPoint pos = [touch locationInView:touch.view];

    UIBezierPath *curentPath = [self.paths lastObject];
    [curentPath addLineToPoint:pos];
    [self setNeedsDisplay];

}
/**
 *  连线
 *
 */
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
    [self touchesMoved:touches withEvent:event];
}

//截屏
+ (instancetype)captureWithView:(UIView *)view
{
    // 1.开启上下文
    UIGraphicsBeginImageContextWithOptions(view.frame.size, NO, 0.0);

    // 2.将控制器view的layer渲染到上下文
    [view.layer renderInContext:UIGraphicsGetCurrentContext()];

    // 3.取出图片
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

    // 4.结束上下文
    UIGraphicsEndImageContext();

    return newImage;
}
@end

//保存到相册

- (IBAction)save {
    //截屏
    UIImage *image = [UIImage captureWithView:self.JFView];

    //保存到相册
    UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
}
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo{
    if (error) {//保存失败
        [MBProgressHUD showError:@"保存失败"];
    }else{//保存成功
        [MBProgressHUD showSuccess:@"保存成功"];
    }

}

希望可以帮助到你,有问题可以关注我喔,我们一起coding

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-13 09:03:27

涂鸦之贝赛尔的相关文章

使用Javascript D3创建属于你的涂鸦作品

Matplotlib可以用来创建很漂亮精确的数学图形: 但是有时候在进行想法交流的时候,不想那么严谨正式,想使用那种轻松的.涂鸦风格的图形: MATLAB XKCDify项目可以用来生成上述的涂鸦作品: https://github.com/slayton/matlab-xkcdify 不过本文将介绍使用Javascript D3库来在线生成你自己的涂鸦作品,这个比安装Matlab要方便得多, 网页界面如下所示,填写你想表达的方程式,涂鸦标题,X/Y轴参数和标签,你还可以通过jQuery UI

MVC使用百度开源文本编辑器UEditor实现图文并茂,字数限制,上传图片或涂鸦

原文:MVC使用百度开源文本编辑器UEditor实现图文并茂,字数限制,上传图片或涂鸦 文本编辑器有很多,比如ticymce和CKEditor就比较好用,但涉及到图片.文件上传,需要结合CKFinder实现,而且有些功能是收费的,即使有意付费使用, 支付也不方便.好在百度的开源文本编辑器UEditor现在也发展得不错,本篇就来体验其在MVC中的使用.需要实现如下效果: 1.上传图片2.上传涂鸦3.字数限制 4.另一视图页图文显示 首先到这里下载UEditor的.NET版本,我下载的是[1.4.3

android 涂鸦(清屏,画笔,粗细,保存)以及canvas源码学习

更新:本文的内容只是一部分,这段时间添加了橡皮擦这个新功能,于是问题接二连三的来,比如说:如果用本文的内容去做橡皮擦的话,难!(至少我没解决,不是没背景图,就是有背景图但是更新要在下一下刷橡皮擦的时候才能更新效果),然后有个setbackgroundresource的函数,这个函数就可以了,但是问题又来了,比如说保存,清屏,但是我都解决了(清屏的话就是重新构造一个图,当clear的时候就把这张图赋值给以前的图片.保存的话我就是把绘下个图放到一张有背景的canvas上面,至是分辨率的问题自己去解决

Android 涂鸦最佳实践

Android中实现手势绘图一般都两种方式,一是直接在View上绘制,而是使用SurfaceView.两者还是有一些区别的,简单介绍下.View:显示视图,内置画布,提供图形绘制函数.触屏事件.按键事件函数等:必须在UI主线程内更新画面,速度较慢. SurfaceView:基于view视图进行拓展的视图类,更适合2D游戏的开发:是view的子类,使用双缓机制,在新的线程中更新画面所以刷新界面速度比view快.所以呢,要实现涂鸦的功能优先选择后者. 在开始码代码之前,先简单理下要实现的功能. 1.

可涂鸦音乐光立方(DIY)

这个光立方是大二的时候自己手工DIY的,在2013年在电子发烧友论坛七夕创意大赛中发表过,现在开通了自己的博客,就想把以前发表过的文章都收集整理起来,以作留念.电子发烧友链接:http://bbs.elecfans.com/forum.php?mod=viewthread&tid=346650&extra= 视频演示链接:http://v.youku.com/v_show/id_XNTYyMDc1NjUy.html 主要实现三大功能:(Y)音频显示(T)涂鸦显示(D)动画显示 第一部分 这

Qt Quick实现的涂鸦程序

之前一直以为 Qt Quick 里 Canvas 才可以自绘,后来发觉不是,原来还有好几种方式都可以绘图!可以使用原始的 OpenGL(Qt Quick 使用 OpenGL 渲染),可以构造QSGNode 来绘图,还可以使用 QPainter !哇, QPainter 我很熟悉啊.于是,我用 QPainter 结合 QML 实现了一个简单的涂鸦程序: PaintedItem .它有下列功能: 设置线条宽度 设置线条颜色 设置背景颜色 清除涂鸦 无限级undo 程序很简陋,效果如下: 图1 Pai

iOS开发UI篇—事件处理(完成一个简单的涂鸦板)

iOS开发UI篇-事件处理(实现一个简单的涂鸦板) 一.说明 该程序使用事件处理机制和绘图完成了一个简单的涂鸦板应用,使用鼠标在涂鸦板内拖动即可进行涂鸦,点击保存到相册按钮,可以把完成的涂鸦保存到手机的相册中,点击回退按钮可以向后退回一步,点击清空可以让涂鸦板清空. 文件结构和界面搭建: 二.代码示例 YYViewController.m文件 1 // 2 // YYViewController.m 3 // 02-画板程序 4 // 5 // Created by apple on 14-6-

AR创意分享:儿童涂鸦遇上程序绘图

第一节 临摹 小明经常临摹同桌小美的画作. 美术课上,老师表扬了小美的新作. 图1.1 小美的作品<蒙娜·毛虫的微笑> 临,是照着原作画:摹,是用薄纸张蒙在原作上面画. 第二节 借画 小明随后借来了小美的画. 但他觉得这样摹着画甚是无趣. 图2.1 未完成的临摹 一般地,临摹耐心与纸张透明度成正比. 第三节 涂鸦 小明认为这只毛虫太孤单了. 然后,他的涂鸦怪兽就蹦了出来. 图3.1 <蒙娜·毛虫与她的怪兽> 涂鸦,随意地涂抹色彩与线条. 第四节 黑白 小明和小美的哥哥是好朋友,他叫

Android应用开发实例篇(1)-----简易涂鸦板

链接地址:http://www.cnblogs.com/lknlfy/archive/2012/03/03/2378328.html 一.概述 这次要做一个简单的涂鸦板应用,以前在Qt上实现过,突然想到要把它在Android上实现,呵呵,既简单又有趣. 二.实现 新建工程MyWall,修改/res/layout/main.xml文件,在里面添加一个SurfaceView和两个Button,用到了RelativeLayout布局,完整的main.xml文件如下: 1 <?xml version=&qu