iOS 图片剪切

    项目开发中,很多地方会用到上传图片的功能。一般都是相机或者相册中取一张图片,改变项目的大小尺寸,上传图片。我们应该给用户一个选择的小框框,去选中照片中的一个区域,然后上传服务器。



   这我就来说说这图片的剪辑的一个小东西。首先我们定义一个类,继承UIbutton;给他一个代理能返回图片  一个初始化方法 位子 图片。

@protocol ImageButtonDelegate <NSObject>

@optional

-(void)saveimage:(UIImage *)iamge;
@end

@interface ImageButton : UIButton

@property(nonatomic,assign)id<ImageButtonDelegate>delegate;
-(instancetype)initWithFrame:(CGRect)frame bgimage:(UIImage *)image;

我们在写.m的方法

#import "ImageButton.h"
@interface ImageButton ()
@property(nonatomic,retain)UIImageView *bgImage;
@property(nonatomic,retain)UIView *bgView;
@property(nonatomic,assign)BOOL isClick;
@property(nonatomic,assign)CGPoint point;
@end

@implementation ImageButton
-(instancetype)initWithFrame:(CGRect)frame bgimage:(UIImage *)image{
    if (self=[super initWithFrame:frame]) {
        _bgImage=[[UIImageView alloc]initWithFrame:self.bounds];
        _bgImage.image=image;
        [self addSubview:_bgImage];
        _bgView=[[UIView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
        _bgView.backgroundColor=[UIColor redColor];
        _bgView.alpha=0.3;
        _bgView.layer.anchorPoint=CGPointMake(0.5, 0.5);
        _bgView.layer.position=CGPointMake(50, 50);
        _bgView.layer.contentsRect=CGRectMake(0, 0, 1, 1);
        [self addSubview:_bgView];
        //添加拖动效果
        UIPanGestureRecognizer *pan=[[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(pan:)];
        [self addGestureRecognizer:pan];
    }
    return self;
}
-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event{
    if (_isClick) {
        _isClick=NO;
        return YES;
    }else{
        _isClick=YES;
    }
    _point=point;
    CGFloat X;
    CGFloat Y;
    X=self.bounds.size.width;
    if (point.x+50>self.bounds.size.width) {
        X=self.bounds.size.width-50;
    }else if(point.x<50){
        X=50;
    }  else{
        X=point.x;
    }
    if (point.y+50>self.bounds.size.height) {
        Y=self.bounds.size.height-50;
    }else if(point.y<50){
        Y=50;
    }   else{
        Y=point.y;
    }
    _bgView.layer.position=CGPointMake(X, Y);
    [self saveimage];
    return YES;
}
-(void)pan:(UIPanGestureRecognizer *)pan{
    //计算偏移量
        CGPoint transP=[pan translationInView:self];
        CGFloat X=_point.x;
        CGFloat Y=_point.y;
        X+=transP.x; Y+=transP.y;
        if (X<50) {
            X=50;
        }else if(X+50>self.bounds.size.width){
            X=self.bounds.size.width-50;
        }
        if (Y<50) {
            Y=50;
        }else if(Y+50>self.bounds.size.height){
            Y=self.bounds.size.height-50;
        }
        _bgView.layer.position=CGPointMake(X, Y);
        [self saveimage];
}
-(void)saveimage{
    UIGraphicsBeginImageContext(CGSizeMake(100, 100));
    //绘制图片
    [_bgImage.image drawInRect:CGRectMake(-(_bgView.layer.position.x-50),- (_bgView.layer.position.y-50), _bgImage.bounds.size.width, _bgImage.bounds.size.height)];
    //获取航下文的图片
    UIImage *mage=UIGraphicsGetImageFromCurrentImageContext();
    //结束上下文
    UIGraphicsEndImageContext();
    if ([self.delegate respondsToSelector:@selector(saveimage:)]) {
        [self.delegate saveimage:mage];
    }
}

只要就是自定义一个按钮 加一个图片。按钮上+一个拖动手势,根据手势的偏移就重新画一张图


这里很多我都是写死的。例如用户选择的区域就是100*100。这个值可以根据需求去改变大小.可以自己在研究一下下,就改变几个数字而且。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值