Quartz2D——屏幕截图,背景平铺

虽然系统自带的有截图功能,但是为了方便用户操作我们在应用中可以设置一个一键截图功能,具体实现如下:

  //截取当前vie成为一张图片
    
    // 使用位图上下文
    // 1.开启位图上下文
    UIGraphicsBeginImageContext(self.view.bounds.size);
    
    // 2.当前控制器的view画在位图上下文
    // render 渲染
    [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
    
    // 3.获取图片
    UIImage *captureImg = UIGraphicsGetImageFromCurrentImageContext();
    
    // 4.结束位图编辑
    UIGraphicsEndImageContext();
    
    // 保存图片到沙盒中
    // 把图片保存为NSData类型
    NSData *imgData = UIImagePNGRepresentation(captureImg);
    // 获取document目录
    NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    // 拼接完整路径
    NSString *path = [doc stringByAppendingPathComponent:@"capture.png"];
    NSLog(@"%@", path);
    // 将数据写入这个路径
    [imgData writeToFile:path atomically:YES];
    


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

图片平铺的实现:

效果图:


实现思路:

设置控制器的背景图片:


在控制器的View上添加一个UITextView,画一个UITextView的背景图片

代码:

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 设置控制器的背景图片
    self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"textBg"]];
    
    // 获取文件路径(新闻)
    NSString *path = [[NSBundle mainBundle] pathForResource:@"news" ofType:nil];
    // 取出文件中的数据(新闻)
    NSString *news = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
    
    
    // 创建一个UITextView
    UITextView *textView = [[UITextView alloc] initWithFrame:self.view.bounds];
    // 设置textView的文本
    textView.text = news;
    // 设置字体大小
//    textView.font = [UIFont systemFontOfSize:20];
    // 设置字体(宋体、黑体。。。)并设置字体大小
    textView.font = [UIFont fontWithName:@"Verdana" size:20];
    
    textView.backgroundColor = [UIColor clearColor];
    [self.view addSubview:textView];
    
    
    // 设置文字背景
    UIImage *dashBgImage = [self dashBgImage];
    
    // 创建一个imageView,并添加到uiTextView的最底层
    UIImageView *bgImageView = [[UIImageView alloc] init];
    
    // 计算文本的size
    CGFloat screenW = [UIScreen mainScreen].bounds.size.width;
    // 计算文字需要的尺寸
    CGSize textNeedSize = [news boundingRectWithSize:CGSizeMake(screenW, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:textView.font} context:nil].size;
    bgImageView.frame = CGRectMake(0, 0, textNeedSize.width, textNeedSize.height);
    // 以平铺的方式将我们做好的虚线的背景图铺满bgImageView
    bgImageView.backgroundColor = [UIColor colorWithPatternImage:dashBgImage];
    
    // 将表格imageView添加到textView的最低层
    [textView insertSubview:bgImageView atIndex:0];
    
    
}

// 虚线背景图
- (UIImage *)dashBgImage{
    
    // 使用位图上下文
    // 设置背景图片的size
    CGFloat bgW = [[UIScreen mainScreen] bounds].size.width;
    CGFloat bgH = 22;
    // 开启一个位图上下文
    UIGraphicsBeginImageContextWithOptions(CGSizeMake(bgW, bgH), NO, 0);
    
    // 获取当前的位图上下文
    CGContextRef bitmapContext = UIGraphicsGetCurrentContext();
    
    // 画虚线
    // 计算线的位置
    CGFloat lineH = 1;
    CGFloat lineY = bgH - lineH; // 将虚线画在背景图片的底部
    
    // 设置虚线的每一段的长度
    CGFloat lengths[3] = {20, 5, 10};
    CGContextSetLineDash(bitmapContext, 0, lengths, 3);
    // 设置虚线颜色
    [[UIColor blueColor] set];
    // 画线
    CGPoint points[2] = {{0, lineY}, {bgW, lineY}};
    CGContextAddLines(bitmapContext, points, 2);
    // 渲染
    CGContextStrokePath(bitmapContext);
    
    // 获取背景图片
    UIImage *bgImage = UIGraphicsGetImageFromCurrentImageContext();
    
    // 结束编辑
    UIGraphicsEndImageContext();
    
    // 返回图片
    return bgImage;
   
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值