项目开发中,很多地方会用到上传图片的功能。一般都是相机或者相册中取一张图片,改变项目的大小尺寸,上传图片。我们应该给用户一个选择的小框框,去选中照片中的一个区域,然后上传服务器。
这我就来说说这图片的剪辑的一个小东西。首先我们定义一个类,继承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。这个值可以根据需求去改变大小.可以自己在研究一下下,就改变几个数字而且。