iOS-画板程序(手势操作无)

//
//  HMPaintView.h
//  画板
//
//  Created by YaguangZhu on 15/9/10.
//  Copyright (c) 2015年 YaguangZhu. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface HMPaintView : UIView

@property(nonatomic,assign)CGFloat width;

@property(nonatomic,strong)UIColor *color;

@property(nonatomic,strong)UIImage *image;

- (void)clearScreen;

- (void)undo;



@end






//
//  HMPaintView.m
//  画板
//
//  Created by YaguangZhu on 15/9/10.
//  Copyright (c) 2015年 YaguangZhu. All rights reserved.
//

#import "HMPaintView.h"
#import "HMPaintPath.h"
@interface HMPaintView()

@property(nonatomic,strong)UIBezierPath *path;

@property(nonatomic,strong)NSMutableArray *paths;

@end

@implementation HMPaintView

- (NSMutableArray *)paths
{
    if (_paths == nil) {
        _paths = [NSMutableArray array];
    }
    
    return _paths;
}
- (CGPoint)pointWithTouches:(NSSet *)touches
{
    UITouch *touch = [touches anyObject];
    return [touch locationInView:self];
}


- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    CGPoint pos = [self pointWithTouches:touches];
    
    HMPaintPath *path = [HMPaintPath paintPathWithLineWidth:_width color:_color startPoint:pos];
    
    
    _path =path;
    [self.paths addObject:path];
 
    
}
-(void)awakeFromNib
{
    _width = 2;
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    CGPoint pos = [self pointWithTouches:touches];
    [_path addLineToPoint:pos];
    [self setNeedsDisplay];
}

// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
    // Drawing code
    
    if (!self.paths.count) return;
  
    for (HMPaintPath *path in self.paths) {
        if ([path isKindOfClass:[UIImage class]]) {
             UIImage *image = (UIImage *)path;
        [image drawAtPoint:CGPointZero];

        }else
        {
             [path.color set]; 
        [path stroke];
        }
            
       
    }
}

- (void)clearScreen
{
    [self.paths removeAllObjects];
    [self setNeedsDisplay];
}

-(void)undo
{
    [self.paths removeLastObject];
    [self setNeedsDisplay];
    
}

- (void)setIamge:(UIImage *)image
{
    _image = image;
    [self.paths addObject:image];
    
    [self setNeedsDisplay];
}

@end
//
//  HMPaintPath.h
//  画板
//
//  Created by YaguangZhu on 15/9/10.
//  Copyright (c) 2015年 YaguangZhu. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface HMPaintPath : UIBezierPath

@property(nonatomic,strong)UIColor *color;



+ (instancetype)paintPathWithLineWidth:(CGFloat)width color:(UIColor *)color startPoint:(CGPoint)startP;
@end

//
//  HMPaintPath.m
//  画板
//
//  Created by YaguangZhu on 15/9/10.
//  Copyright (c) 2015年 YaguangZhu. All rights reserved.
//

#import "HMPaintPath.h"

@implementation HMPaintPath

+ (instancetype)paintPathWithLineWidth:(CGFloat)width color:(UIColor *)color startPoint:(CGPoint)startP
{
    HMPaintPath *path = [[self alloc] init];
    
    path.lineWidth = width;
    
    path.color = color;
    [path moveToPoint:startP];
    return path;
}
@end
//
//  HMHandleImageView.h
//  画板
//
//  Created by YaguangZhu on 15/9/10.
//  Copyright (c) 2015年 YaguangZhu. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface HMHandleImageView : UIView

@end

------------手势操作------------------

//
//  HMHandleImageView.m
//  画板
//
//  Created by YaguangZhu on 15/9/10.
//  Copyright (c) 2015年 YaguangZhu. All rights reserved.
//

#import "HMHandleImageView.h"

@implementation HMHandleImageView

/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
    // Drawing code
}
*/

@end
//
//  ViewController.h
//  画板
//
//  Created by YaguangZhu on 15/9/10.
//  Copyright (c) 2015年 YaguangZhu. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController


@end




//
//  ViewController.m
//  画板
//
//  Created by YaguangZhu on 15/9/10.
//  Copyright (c) 2015年 YaguangZhu. All rights reserved.
//

#import "ViewController.h"
#import "HMPaintView.h"
#import "MBProgressHUD+MJ.h"
@interface ViewController ()<UINavigationControllerDelegate,UIImagePickerControllerDelegate>
@property (weak, nonatomic) IBOutlet HMPaintView *paintView;

@end

@implementation ViewController
- (IBAction)save:(id)sender {
    UIGraphicsBeginImageContextWithOptions(_paintView.bounds.size, NO, 0.0);
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    [_paintView.layer renderInContext:ctx];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    
    UIGraphicsEndImageContext();
    
    UIImageWriteToSavedPhotosAlbum(newImage, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
    
}
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
{
    if (error) {
        [MBProgressHUD showError:@"保存失败"];
    }else
    {
        [MBProgressHUD showSuccess:@"保存成功"];
    }
}

- (IBAction)selectPicture:(id)sender {
    UIImagePickerController *picker = [[UIImagePickerController alloc]init];
    
    picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
    picker.delegate = self;
    [self presentViewController:picker animated:YES completion:nil];
}

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
   
    
    UIImage *image = info[UIImagePickerControllerOriginalImage];
    _paintView.image = image;
    
    [self dismissViewControllerAnimated:YES completion:nil];
    
}

- (IBAction)eraser:(id)sender {
    _paintView.color = [UIColor lightGrayColor];
}

- (IBAction)undo:(id)sender {
    [_paintView undo];

}

- (IBAction)clearScreen:(id)sender {
    [_paintView clearScreen];
}


- (IBAction)colorClick:(UIButton *)sender {
    _paintView.color = sender.backgroundColor;
}


- (IBAction)valueChange:(UISlider *)sender {
    _paintView.width = sender.value;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

 

posted @ 2015-09-10 22:18  微博和csdn还有你  阅读(209)  评论(0编辑  收藏  举报