• 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
  • 相关阅读:
    私有 composer 包创建
    随机数是如何生成的
    TCP 三次握手的意义
    何为真何为假
    Python流程控制语句详解
    Python类中装饰器classmethod,staticmethod,property,
    函数进阶
    初识函数
    文件操作
    is ==小数据池编码解码
  • 原文地址:https://www.cnblogs.com/zhuyaguang/p/4799330.html
Copyright © 2020-2023  润新知