画板实现
1.运行时的长相
图片
对图片布局简单说明:详细请看代码
- 共有三块:toolbar,view(画图的地方),view(一个进度条,三个按钮,红黑蓝)
2.将按钮进度条拉一些线到控制器中,如下代码
@interface ViewController ()<UINavigationControllerDelegate,UIImagePickerControllerDelegate>
@property (weak, nonatomic) IBOutlet HYLDrawView *drawView;
@end
@implementation ViewController
#pragma mark - clear
- (IBAction)clear:(UIBarButtonItem *)sender {
}
#pragma mark _ cancel
- (IBAction)cancel:(UIBarButtonItem *)sender {
}
#pragma mark - eraser
- (IBAction)eraser:(UIBarButtonItem *)sender {
}
#pragma mark -pickerPhoto
- (IBAction)pickerPhoto:(UIBarButtonItem *)sender {
UIImagePickerController *pickerVC=[[UIImagePickerController alloc]init];
pickerVC.delegate=self;
[self presentViewController:pickerVC animated:YES completion:nil];
}
#pragma mark - save
- (IBAction)save:(UIBarButtonItem *)sender {
}
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo{
}
#pragma mark - sliderChange
- (IBAction)sliderChange:(UISlider *)sender {
}
#pragma mark - redColor
- (IBAction)redColor:(UIButton *)sender {
}
#pragma mark - blackColor
- (IBAction)blackColor:(UIButton *)sender {
}
#pragma mark - greenColor
- (IBAction)greenColor:(UIButton *)sender {
}
3.知晓一条线怎么画,那么多条线,只需弄个数组,保存所有的路径,path的属性也可以在这个时候保存
- 手势的添加,以及一个路径添加的时机
#pragma mark - setPan
-(void) setPan{
UIPanGestureRecognizer *pan= [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(pan:)];
[self addGestureRecognizer:pan];
self.pathColor=[UIColor blackColor];
self.lineWidth=1;
}
-(void) pan:(UIPanGestureRecognizer *) pan{
if (pan.state==UIGestureRecognizerStateBegan) {
_curP=[pan locationInView:self];
self.path=[[HYLDrawPath alloc]init];
[self.path moveToPoint:self.curP];
self.path.lineWidth=self.lineWidth;
// [self.pathColor set];
self.path.pathColor = _pathColor;
[self.pathArrM addObject:self.path];
}else if(pan.state==UIGestureRecognizerStateChanged){
self.curP=[pan locationInView:self];
[self.path addLineToPoint:self.curP];
[self setNeedsDisplay];
}
}
- 将所有路径画出,还要注意一个问题:那就是何时触发重绘的问题
#pragma mark -drawRect
- (void)drawRect:(CGRect)rect {
for (HYLDrawPath *path in self.pathArrM) {
if ([path isKindOfClass:[UIImage class]]) {
UIImage *image=(UIImage *) path;
[image drawAtPoint:CGPointZero];
} else {
[path.pathColor set];
[path stroke];
}
}
}
3.其它简单,注意两个问题
- 1.当无法从storyboard中向代码不能拖线时,可以先写上代码向storyboard中拖线
- 2.因为绘画控件类型是自己定义的类,那么定义类中的属性在拖线时,也就带了过来,设置其属性
4.保存图片至相册时,在无法解决问题时,可以点进去,看一下API,这对不熟悉的东西,猜测学习的一种方式
- 看图
- 它给出了解决的方案