思路是建一个UIView的子类,获取划动出的矩形,用协议将矩形传递给代理对象,依据该矩形完成图像数据的截取,并显示出来。
截图视图类:
#import <UIKit/UIKit.h>@protocol UICutImgDelegate;@interface BIDCutView : UIView {CGPoint startPoint;CGRect targetRect;id <UICutImgDelegate> _delegate; } @property (assign , nonatomic) id delegate; @end@protocol UICutImgDelegate <NSObject> -(void)cutImgWithRect:(CGRect) aRect; -(void)clear; @end
#import "BIDCutView.h"@implementation BIDCutView@synthesize delegate=_delegate;- (id)initWithFrame:(CGRect)frame {self = [super initWithFrame:frame];if (self) {// Initialization code }return self; }- (void)drawRect:(CGRect)rect {CGContextRef ctx = UIGraphicsGetCurrentContext();CGContextSetLineWidth(ctx, 1.5);CGContextSetStrokeColorWithColor(ctx, [UIColor purpleColor].CGColor);CGFloat lengths[2] = {15.0,5.0};CGContextSetLineDash(ctx, 2, lengths, 2);CGContextStrokeRect(ctx, targetRect); //画虚线矩形 }-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {[self.delegate clear];startPoint=[[touches anyObject] locationInView:self]; }-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {CGPoint currentPoint=[[touches anyObject] locationInView:self];targetRect = CGRectMake(startPoint.x, startPoint.y, currentPoint.x-startPoint.x, currentPoint.y-startPoint.y);[self setNeedsDisplay]; }-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {if (self.delegate && [self.delegate respondsToSelector:@selector(cutImgWithRect:)]) {[self.delegate cutImgWithRect:targetRect];} }
@end
视图控制器:(作为截图视图的代理对象)
#import <UIKit/UIKit.h> #import "BIDCutView.h"@interface BIDRootViewController : UIViewController <UICutImgDelegate>@end
#import "BIDRootViewController.h" #import "BIDSimpleTouchFun.h" #import "BIDDiscount.h"@implementation BIDRootViewController-(void)loadView {[super loadView];
//self.view=[[[BIDDrawViewalloc] initWithFrame:CGRectMake(0, 0, 320, 460)] autorelease];
BIDCutView *cutView=[[BIDCutView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];cutView.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:@"abc.jpg"]];cutView.delegate = self;[self.view addSubview:cutView];[cutView release]; } - (void)viewDidLoad {[super viewDidLoad]; }- (void)didReceiveMemoryWarning {[super didReceiveMemoryWarning]; }-(void)cutImgWithRect:(CGRect)aRect {UIImage *img=[UIImage imageNamed:@"abc.jpg"];CGImageRef imgRef = img.CGImage;CGImageRef targetImgRef = CGImageCreateWithImageInRect(imgRef, aRect); //图像的截取UIImage *targetImg=[UIImage imageWithCGImage:targetImgRef];UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, aRect.size.width, aRect.size.height)];imgView.image = targetImg; //把截取得的图像显示到视图中去imgView.tag=1000;[self.view addSubview:imgView];[imgView release]; }-(void)clear {UIImageView *imgView=(UIImageView *)[self.view viewWithTag:1000];[imgView removeFromSuperview]; }
效果: