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

基于这样的截图
WechatIMG7.png
分享之后
WechatIMG6.png

,

效果图分享之后
IMG_7310.JPG
IMG_7309.JPG

分析:这是由三部分组成的
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.
}

项目地址

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值