虽然系统自带的有截图功能,但是为了方便用户操作我们在应用中可以设置一个一键截图功能,具体实现如下:
//截取当前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;
}