思路是建一个UIView的子类,获取划动出的矩形,用协议将矩形传递给代理对象,依据该矩形完成图像数据的截取,并显示出来。
截图视图类:
#import@protocol UICutImgDelegate;@interface BIDCutView : UIView{ CGPoint startPoint; CGRect targetRect; id _delegate;}@property (assign , nonatomic) id delegate;@end@protocol UICutImgDelegate -(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#import "BIDCutView.h"@interface BIDRootViewController : UIViewController @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];}
效果: