您的位置:首页 > 移动开发 > IOS开发

iOS截取特定区域的图片,然后拼接起来,可在图片上定制任意控件

2017-07-28 09:56 218 查看
基于这样的截图



分享之后



,

效果图分享之后





分析:这是由三部分组成的


1.headerImageView(头部的控件)


2.midView(中间的控件)


3.footerImageView(下部的控件)


下面来上代码

#import "ViewController.h"

@interface ViewController ()<UIActionSheetDelegate>
/** 头部 */
@property (nonatomic,strong) UIImageView *headerImageView;
/** 中部 */
@property (nonatomic,strong) UIView *midView;
/** 下部 */
@property (nonatomic,strong) UIImageView *footerImageView;

@end

@implementation ViewController
-(UIImageView *)headerImageView{
if (_headerImageView == nil) {
_headerImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"default_logo@3x.png"]];
_headerImageView.frame = CGRectMake(0, 0, self.view.frame.size.width, 200);
}
return _headerImageView;
}
-(UIView *)midView{
if (_midView == nil) {
_midView = [[UIView alloc] initWithFrame:CGRectMake(0, CGRectGetMaxY(self.headerImageView.frame), self.view.frame.size.width, 200)];
[_midView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"img_01@3x.png"]]];

}
return _midView;
}
-(UIImageView *)footerImageView{
if (_footerImageView == nil) {
_footerImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"1487513280.png"]];
_footerImageView.frame = CGRectMake(0, CGRectGetMaxY(self.midView.frame), self.view.frame.size.width, 200);
}
return _footerImageView;
}


- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

}
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
[self screenShot];
}
-(void)screenShot{

UIActionSheet *actionsheet = [[UIActionSheet alloc] initWithTitle:@"保存图片到相册?" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:@"确定" otherButtonTitles: nil];
[actionsheet showInView:self.view];

actionsheet = nil;

}


//保存图片
- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex {
if (buttonIndex != [actionSheet cancelButtonIndex] ) {
[self.view addSubview:self.headerImageView];
UIImage *headerImage = [self screenShotWithSize:self.headerImageView.frame.size Layer:self.headerImageView.layer];
[self.headerImageView removeFromSuperview];
[self.view addSubview:self.midView];
UIImage *midImage = [self screenShotWithSize:self.midView.frame.size Layer:self.midView.layer];
[self.midView removeFromSuperview];
[self.view addSubview:self.footerImageView];
UIImage *footerImage = [self screenShotWithSize:self.footerImageView.frame.size Layer:self.footerImageView.layer];
[self.footerImageView removeFromSuperview];

UIImage *saveImage = [self addSlaveHeaderImage:headerImage toMasterMidImage:midImage toMasterFootImage:footerImage];

UIImageWriteToSavedPhotosAlbum(saveImage, self, nil, nil);
}
return;
}
/* *
* slaveheaderImage  上边视图的图片,生成的图片的宽度为headerImageView的宽度
* mastermidImage  中间视图的图片,生成的图片的宽度为midView的宽度,拼接在headerImageView的下面
* masterfootImage  下边视图的图片,生成的图片的宽度为footerImageView的宽度,拼接在midView的下面
*/
- (UIImage *)addSlaveHeaderImage:(UIImage *)slaveheaderImage toMasterMidImage:(UIImage *)mastermidImage toMasterFootImage:(UIImage *)masterfootImage{
CGSize size;
size.width = slaveheaderImage.size.width;
size.height = slaveheaderImage.size.height + mastermidImage.size.height + masterfootImage.size.height;

UIGraphicsBeginImageContextWithOptions(size, YES, 0.0);

//Draw slaveheaderImage
[slaveheaderImage drawInRect:CGRectMake(0, 0, slaveheaderImage.size.width, slaveheaderImage.size.height)];

//Draw mastermidImage
[mastermidImage drawInRect:CGRectMake(0, mastermidImage.size.height, mastermidImage.size.width, mastermidImage.size.height)];

//Draw masterfootImage
[masterfootImage drawInRect:CGRectMake(0, slaveheaderImage.size.height+masterfootImage.size.height, masterfootImage.size.width, masterfootImage.size.height)];

UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return resultImage;
}
//截取定点位置屏幕图片
- (UIImage *)screenShotWithSize:(CGSize)size Layer:(CALayer *)layer{
UIImage* image = nil;
/*
*UIGraphicsBeginImageContextWithOptions有三个参数
*size    bitmap上下文的大小,就是生成图片的size
*opaque  是否不透明,当指定为YES的时候图片的质量会比较好
*scale   缩放比例,指定为0.0表示使用手机主屏幕的缩放比例
*/
UIGraphicsBeginImageContextWithOptions(size, YES, 0.0);
//此处我截取layer.
[layer renderInContext: UIGraphicsGetCurrentContext()];

image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

if (image != nil) {
return image;
}else {
return nil;
}
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}


项目地址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios 界面 图片 控件