(IOS)截圖Demo

思路是建一個UIView的子類,獲取划動出的矩形,用協議將矩形傳遞給代理對象,依據該矩形完成圖像數據的截取,並顯示出來。atom

截圖視圖類:spa

#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];
}

效果: code

相關文章
相關標籤/搜索