随着手指在屏幕上滑会实时显示一个红色框框,可以用来裁剪图片。新建一个UIView类继承于UIView,在里面进行绘图操作。在需要的UIViewController里实现代理方法即可。图片裁剪方法,以后会详细介绍,这里不做讲解。效果图和代码如下:
// MyView.h
// 头像编辑
// Created by Dong on 15/5/8.
// Copyright (c) 2015年 Dong. All rights reserved.
#import <UIKit/UIKit.h>
// 代理传图片
@protocol getEditedImageDelegate <NSObject>
- (void)getNewImage:(CGRect)newRect;
@end
@interface MyView : UIView
@property (nonatomic, strong) UIImageView *imageView;
// 图片
@property (nonatomic, strong) UIImage *myImage;
@property (nonatomic, assign)id<getEditedImageDelegate>getImageDelegate;
@end
// MyView.m
// 头像编辑
// Created by Dong on 15/5/8.
// Copyright (c) 2015年 Dong. All rights reserved.
#import "MyView.h"
@implementation MyView
{
CGPoint firstTouch;
CGPoint lastTouch;
CGPoint lastTouch1;
}
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
}
return self;
}
// 开始触摸
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
// 获取触摸点
firstTouch = [touch locationInView:self];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
lastTouch = [touch locationInView:self];
/**
* 此时会实时绘制起始点与用户手指拖动点之间的形状
*/
[self setNeedsDisplay];
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
lastTouch = [touch locationInView:self];
[self setNeedsDisplay];
CGRect rec = CGRectMake(firstTouch.x, firstTouch.y, lastTouch.x - firstTouch.x, lastTouch.y - firstTouch.y);
/**
*
* 获取裁剪图片大小的代理方法
* */
[self.getImageDelegate getNewImage:rec];
}
// 获取矩形
- (CGRect)curRect
{
return CGRectMake(firstTouch.x, firstTouch.y, lastTouch.x - firstTouch.x, lastTouch.y - firstTouch.y);
}
- (void)drawRect:(CGRect)rect {
// Drawing code
// 获得设备上下文 把视图当做画布
CGContextRef context = UIGraphicsGetCurrentContext();
// 需要显示的红色框框
CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
CGContextStrokeRect(context, [self curRect]);
}
@end
原文地址:http://blog.csdn.net/xin__dong/article/details/45891011