单选相册图片后剪切功能

来源:互联网 发布:touch.js官网 编辑:程序博客网 时间:2024/06/11 18:42

#import <UIKit/UIKit.h>

@class PhotoEditViewController;

@protocol PhotoEditDelegate <NSObject>

- (void)completedSelectImage:(NSArray *)images;


@end


@interface PhotoEditViewController :UIViewController

@property (nonatomic,weak) id<PhotoEditDelegate> delegate;

@property (nonatomic,copy) NSArray *upImgs;

@property (nonatomic,assign)BOOL isScale;


@end


#import "PhotoEditViewController.h"


#define QrcodeX 5 //扫描框x位置

#define QrcodeW ceil(kScreenWidth-(QrcodeX*2))//扫描框大小

#define QrcodeY ceil((kScreenHeight - QrcodeW)*.48)//扫描框y位置


@interface PhotoEditViewController ()<UIGestureRecognizerDelegate,UIImagePickerControllerDelegate,UINavigationControllerDelegate>


@property (nonatomic,strong)UIImageView *imagePanel;

@property (nonatomic,strong)UIPinchGestureRecognizer *pinchRecognizer;

@property (nonatomic,strong)UIPanGestureRecognizer   *panRecognizer;

@property (weak,nonatomic) IBOutletUIView *cotrolView;


@end


@implementation PhotoEditViewController{

    

    CGFloat _lastScale;

    CGFloat _firstX;

    CGFloat _firstY;

}


- (void)viewDidLoad {

    [superviewDidLoad];

   

    // Do any additional setup after loading the view from its nib.

    self.imagePanel.image = [_upImgsfirstObject];

    [selfsetupCut];

    [self.viewbringSubviewToFront:_cotrolView];

}


- (void)viewWillAppear:(BOOL)animated{

    

    [superviewWillAppear:animated];

    

}



-(void)viewWillDisappear:(BOOL)animated{

    [superviewWillDisappear:animated];

}


- (void)didReceiveMemoryWarning {

    [superdidReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.


}


- (IBAction)cancelAction:(id)sender {

    [self.navigationControllerpopViewControllerAnimated:YES];

}



- (IBAction)cutAction:(id)sender {

    

    CGFloat scale =self.imagePanel.image.size.height/self.imagePanel.height;

    CGFloat cropW = scale*QrcodeW;

    

    CGFloat cropX = -(QrcodeX -self.imagePanel.left)*scale;

    CGFloat cropY = -(QrcodeY -self.imagePanel.top)*scale;

    

    if (cropX>0) {

        cropX = 0.0;

    }

    if (cropY>0) {

        cropY = 0.0;

    }

    

    @weakify(self);

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{

        UIImage *cropImg = [weak_self.imagePanel.imagecrop:CGRectMake(cropX, cropY, cropW, cropW)];

        NSString *type = [_upImgslastObject];

        NSArray *newUp =@[cropImg,type];

        

        dispatch_async(dispatch_get_main_queue(), ^{

            if (weak_self.delegate&&[weak_self.delegaterespondsToSelector:@selector(completedSelectImage:)]) {

                [weak_self.delegatecompletedSelectImage:newUp];

            }

            [self.navigationControllerdismissViewControllerAnimated:YEScompletion:nil];

        });

    });

}


#pragma  mark - ***********Cut Main Method***********

/* 图片控件 */

- (UIImageView *)imagePanel{

    if(!_imagePanel){

        _imagePanel = [UIImageViewnew];

        _imagePanel.contentMode =UIViewContentModeScaleAspectFit;

    }

    [self.viewinsertSubview:_imagePanelatIndex:0];

    return_imagePanel;

}


- (void)setupCut{


    [selffixTheCropFrameOrigin:YES];


    //最上部view

    UIView* upView = [ETUIUtildrawViewWithFrame:CGRectMake(0,0, kScreenWidth,QrcodeY) BackgroundColor:MarkBackColor];

    [self.viewaddSubview:upView];

    

    //左侧的view

    UIView *leftView = [ETUIUtildrawViewWithFrame:CGRectMake(0,QrcodeY, QrcodeX,QrcodeW) BackgroundColor:MarkBackColor];

    [self.viewaddSubview:leftView];

    

    //右侧的view

    UIView *rightView = [ETUIUtildrawViewWithFrame:CGRectMake(QrcodeX+QrcodeW,QrcodeY, QrcodeX,QrcodeW) BackgroundColor:MarkBackColor];

    [self.viewaddSubview:rightView];

    

    //底部view

    UIView *downView = [ETUIUtildrawViewWithFrame:CGRectMake(0,QrcodeY+QrcodeW,kScreenWidth, kScreenHeight - (QrcodeY+QrcodeW))BackgroundColor:MarkBackColor];

    [self.viewaddSubview:downView];

    

   //推荐趣处禁止缩放

    if (self.isScale) {

        

        _pinchRecognizer =nil;

        [self.viewremoveGestureRecognizer:_pinchRecognizer];

        

    }else{

        

        _pinchRecognizer = [[UIPinchGestureRecognizeralloc] initWithTarget:selfaction:@selector(scale:)];

        [self.viewaddGestureRecognizer:_pinchRecognizer];

    

    }

   

    

    _panRecognizer = [[UIPanGestureRecognizeralloc] initWithTarget:selfaction:@selector(move:)];

    [_panRecognizersetMinimumNumberOfTouches:1];

    [_panRecognizersetMaximumNumberOfTouches:3];

    [self.viewaddGestureRecognizer:_panRecognizer];

}


// 缩放

-(void)scale:(id)sender {

    

    if([(UIPinchGestureRecognizer*)senderstate] == UIGestureRecognizerStateBegan||[(UIPinchGestureRecognizer*)senderstate] == UIGestureRecognizerStateChanged){

        CGFloat scale =0.0;

        if (_lastScale>0) {

            scale = 1.0 - (_lastScale - [(UIPinchGestureRecognizer*)senderscale]);

        }else{

            scale = [(UIPinchGestureRecognizer*)senderscale];

        }

        

        CGAffineTransform currentTransform =self.imagePanel.transform;

        CGAffineTransform newTransform =CGAffineTransformScale(currentTransform, scale, scale);

        

        [self.imagePanelsetTransform:newTransform];

        

        if (newTransform.a>=1) {

            [self.imagePanelsetTransform:newTransform];

        }else{

            [self.imagePanelsetTransform:CGAffineTransformIdentity];

        }

        

        //大小变化但不可移出

        [selffixTheCropFrameOrigin:NO];

        _lastScale = [(UIPinchGestureRecognizer*)senderscale];

        

    }

    

    if([(UIPinchGestureRecognizer*)senderstate] == UIGestureRecognizerStateEnded){

        _lastScale =1.0;

        return;

    }

}


// 移动

-(void)move:(id)sender {

    

    CGPoint translatedPoint = [(UIPanGestureRecognizer*)sendertranslationInView:self.view];

    

    if([(UIPanGestureRecognizer*)senderstate] == UIGestureRecognizerStateBegan) {

        _firstX = [self.imagePanelcenter].x;

        _firstY = [self.imagePanelcenter].y;

    }

    

    if([(UIPanGestureRecognizer*)senderstate] == UIGestureRecognizerStateChanged){

        

        translatedPoint = CGPointMake(_firstX + translatedPoint.x,_firstY + translatedPoint.y);

        

        //位置变化但不可移出

        if (self.imagePanel.width*.5 + QrcodeX<translatedPoint.x) {

            translatedPoint = CGPointMake(self.imagePanel.width*.5 + QrcodeX, translatedPoint.y);

        }

        if(self.imagePanel.height*.5 + QrcodeY<translatedPoint.y){

            translatedPoint = CGPointMake(translatedPoint.x,self.imagePanel.height*.5 +QrcodeY);

        }

        

        if (translatedPoint.x +self.imagePanel.width*.5<QrcodeX + QrcodeW) {

            

            translatedPoint = CGPointMake((QrcodeX +QrcodeW - self.imagePanel.width*.5), translatedPoint.y);

        }

        

        if(translatedPoint.y +self.imagePanel.height*.5<QrcodeW + QrcodeY){

            translatedPoint = CGPointMake(translatedPoint.x, (QrcodeY +QrcodeW - self.imagePanel.height*.5));

        }

        

        [self.imagePanelsetCenter:translatedPoint];

        

    }

}


- (void)fixTheCropFrameOrigin:(BOOL)origin{

    

    if (origin) {

        

        CGSize imgeSize =_imagePanel.image.size;

        //起始位置

        if(imgeSize.height>=imgeSize.width){

            _imagePanel.width =QrcodeW;

            _imagePanel.height = (QrcodeW*imgeSize.height)/imgeSize.width;


        }else{

            _imagePanel.height =QrcodeW;

            _imagePanel.width =QrcodeW*imgeSize.width/imgeSize.height;

        }

        _imagePanel.center =CGPointMake(QrcodeX+QrcodeW*.5,QrcodeY+QrcodeW*.5);

    }else{

        

        //位置变化但不可移出

        if (self.imagePanel.left>QrcodeX) {

            self.imagePanel.left =QrcodeX;

        }

        

        if(self.imagePanel.top>QrcodeY){

            self.imagePanel.top =QrcodeY;

        }

        

        if (self.imagePanel.right<QrcodeX + QrcodeW) {

            self.imagePanel.right =QrcodeX + QrcodeW;

        }

        

        if(self.imagePanel.bottom<QrcodeW + QrcodeY){

            self.imagePanel.bottom =QrcodeW + QrcodeY;

        }

    }

}


- (void)dealloc{

    

    _imagePanel.image =nil;

    _pinchRecognizer =nil;

    _panRecognizer =nil;

}

@end



1 0
原创粉丝点击