单选相册图片后剪切功能
来源:互联网 发布: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
- 单选相册图片后剪切功能
- Android 超高仿微信图片多选、单选,图片剪切,图片预览,拍照等功能
- android调用系统相册选图或相机拍照后对图片进行剪切无内存溢出支持7.0
- 选择图片剪切功能
- Android调用本地相册选择图片并剪切后展示和缓存
- android 调用系统相机、相册剪切功能
- anroid 拍照调用相册 剪切编辑图片
- android 拍照和选择相册图片剪切
- Android中调到相册剪切图片
- iOS 系统相册获取图片,保存图片,以及剪切图片
- 读取手机相册,从手机相册读取图片剪切,拍照获取图片,获取拍照图片进行剪切
- 【iOS】拍照/相册单选、相册多选、图片浏览、图片裁剪
- 从相册或拍照选择图片并剪切
- Android 从相册和相机选取图片并剪切
- Android 从相机或相册获取图片并剪切
- Android从相册选择一个图片、剪切、上传
- JAVA实现图片剪切缩放功能
- android实现图片相册功能
- c++ double转为string
- 跟我学Shiro目录贴
- Java-ImageObserver,BufferedImage,Graphics2D,Graphics
- html5本地存储
- RecyclerView详细介绍-----解决点击事件,刷新错误(二)
- 单选相册图片后剪切功能
- c++ string 转换成 wstring
- 安装虚拟打印机失败,无法安装,找不到指定的模块解决方法
- 选择器和分配器
- vs编译程序加快速度的方法
- Solr 千万级大数据索引查询导致服务器崩溃的原因和解决
- HDU 1075 字典树
- 洛谷 P2698 [USACO12MAR]花盆Flowerpot(抄)
- (2)Ubuntu常用命令