项目:图片水印
- 获取上下文,之前的上下文都是在view的drawRect 方法中获取(跟view的layer相关联的上下文)
- 怎么获取位图上下文,注意位图上下文的获取方式跟layer上下文不一样,需要我们手动创建。
- 步骤:
- 1.开启一个位图上下文
- 2.绘制原生的图片
- 3.给原生的图片添加文字
- 4.生成一张图片给我们,从上下文中获取图片
- 5.关闭上下文
// 开启一个位图上下文,注意位图上下文跟view无关联,所以不需要在drawRect.
// size:位图上下文的尺寸(新图片的尺寸)
// opaque: 不透明度 YES:不透明 NO:透明,通常我们一般都弄透明的上下文
// scale:通常不需要缩放上下文,取值为0,表示不缩放
UIGraphicsBeginImageContextWithOptions(image.size, NO, 0);
图片裁剪
把正方性图片重新生产一张圆形的图片
初始的画板上面没有任何东西,是创建一个又一个路径并往上面添加
- 步骤:
- 1.加载图片
- 2.开启位图上下文,跟图片尺寸一样大
- 3.设置原型裁剪区域,正切于图片。创建原型的路径,并把路径设置为裁剪区域。
- 4.绘制图片
- 5.从上下文中获取图片
- 6.关闭上下文
- 注意:在裁剪区域之前设置圆环。
- 使用分类,抽取代码方法:返回裁剪的图片。可为UIImage 类增加额外的方法,将代码封装起来,复用。
屏幕截图
用于分享图片内容,炫耀装B
- 步骤
- 1.开启位图上下文
- 2.获取上下文
- 3.将控件上的图层渲染到上下文,layer只能渲染,不能绘制。但是字符串以及图片均可以绘制。
- 4.生成一张图片
- 5.关闭上下文
- 将图片保存到本地文件,并没有直接的对象方法可以调用,需要将其转化为NSData,再写入文件,代码如下
// image转data
// compressionQuality: 图片质量 1:最高质量
// PNG的图片质量较为清晰,JPEG次之。
NSData *data = UIImageJPEGRepresentation(image,1);
[data writeToFile:@"/Users/xiaomage/Desktop/view.png" atomically:YES];
- 抽取代码:返回屏幕截图后的图片,为UIImage 类增加额外的功能。
图片截取、图片擦除
- 图片截取步骤:
- 给控制器的view 添加一个 pan 手势
- pan 行为发生的时候进入处理函数
- 一开始拖动的时候
- 一直拖动的时候
- 获取结束点
- 获取截取范围
- 生成截屏的view,并将其添加至view中
- 拖动结束的时候
- 开启上下文
- 设置裁剪区域
- 获取上下文
- 把控件上的内容渲染到上下文
- 生成一张新的图片
- 关闭上下文
- 移除截屏的view
-
- 图片擦除代码如下:
- (void)pan:(UIPanGestureRecognizer *)pan
{
// 获取当前点
CGPoint curP = [pan locationInView:self.view];
// 获取擦除的矩形范围
CGFloat wh = 100;
CGFloat x = curP.x - wh * 0.5;
CGFloat y = curP.y - wh * 0.5;
CGRect rect = CGRectMake(x, y, wh, wh);
// 开启上下文
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, 0);
CGContextRef ctx = UIGraphicsGetCurrentContext();
// 控件的layer渲染上去
[_imageView.layer renderInContext:ctx];
// 擦除图片
CGContextClearRect(ctx, rect);
// 生成一张图片
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
_imageView.image = image;
// 关闭上下文
UIGraphicsEndImageContext();
}
手势解锁
- 按钮的选中状态与高亮状态是不一样的。分别为:UIControlStateSelected\UIControlStateHighlighted。高亮状态是按钮点击时候发生的,选择状态可以代码设置。
- 为什么要在- (void)layoutSubviews布局子控件,因为只要一调用这个方法,就表示父控件的尺寸确定。
- 从storyboard上也可以创建手势,总共有7个。
项目:画板
- 搭建界面
- 使用toolBar 控件,添加UIBarButtonItem 模型。可以方便的对其内容进行布局管理。
- 使用Flexible Bar Button Item 放在 UIBarButtonItem 之前,在toolBar控件frame改变的时候,起到一个弹簧的作用。
- 在 awakeFromNib:以及initWithFrame:都要进行初始化设置,具有更好的扩展性。
- 在使用drawRect:方法重新绘制屏幕时,可以将贝瑟尔路径定义在外面,然后在drawRect:中执行:[path stroke]方法也可。
-
只要调用drawRect:方法,就会把之前的内容全部清空
。
- UIImagePickerController 系统相册控制器
- 通过设置控制器的来源:可以有相册集\照片库\相机
- 监听用户在系统相册控制器的行为,需要设置delegate
- 使用位图上下文来进行画图截屏
- UIImageWriteToSavedPhotosAlbum:方法,可以将图片写入至相册,并可以监听到是否保存完成,保存完成的方法不能够随便乱写,具体见官方说明。
网友评论