UI知识小集
1.屏幕截图
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// 1. 创建一个与控制器view一样大的图形上下文
UIGraphicsBeginImageContextWithOptions(self.view.frame.size, NO, 0.0);
// 1.1 获取当前上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
// 2. 把控制器的view中的内容渲染到上下文中
[self.view.layer renderInContext:ctx];
// 3. 从上下文中获取图片
UIImage* img = UIGraphicsGetImageFromCurrentImageContext();
// 4. 关闭上下文
UIGraphicsEndImageContext();
// 5. 把屏幕截图保存到相册
UIImageWriteToSavedPhotosAlbum(img, nil, nil, nil);
});
2.图片加水印
// 1. 加载原图
UIImage* img = [UIImage imageNamed:@"imageName"];
// 2. 根据原图的大小, 创建一个Bitmap的图形上下文
UIGraphicsBeginImageContextWithOptions(img.size, NO, 0.0);
// 3. 把原图绘制到上下文中
[img drawAtPoint:CGPointZero];
// 4. 绘制水印(水印文字、水印图片)
// 4.1 绘制水印文字
NSString* strMsg = @"水印文字";
NSDictionary* attrs = @{
NSFontAttributeName : [UIFont systemFontOfSize:25],
NSForegroundColorAttributeName : [UIColor redColor]
};
[strMsg drawAtPoint:CGPointMake(30, 30) withAttributes:attrs];
// 4.2 绘制图片水印
// 4.2.1 加载水印图片
UIImage* imgWatermark = [UIImage imageNamed:@"logo"];
CGFloat margin = 20;
CGFloat w = 200;
CGFloat h = 80;
CGFloat x = img.size.width - w - margin;
CGFloat y = img.size.height - h - margin;
[imgWatermark drawInRect:CGRectMake(x, y, w, h)];
// 5. 从上下文中取出绘制好的图片
UIImage* imgFinal = UIGraphicsGetImageFromCurrentImageContext();
// 6. 关闭上下文
UIGraphicsEndImageContext();
// 7. 保存图片
UIImageWriteToSavedPhotosAlbum(imgFinal, nil, nil, nil);