iPhone撕衣服游戏-图片擦除
2016-05-11 10:16
405 查看
原理:
撕衣服游戏的原理就是用两张几乎一样的照片(两张照片的区别就是一张比较保守,一张比较开放,实质是设计师在原本开放的模特照片上P了一层衣服),把开放的图片放在下面,把保守的图片放在上面(每一张图片都放在一张imageView上)。撕衣服的过程也就是擦除图片的过程,把手势接触过的地方图片擦除。
步骤:
1.给控制器添加pan手势,并设置监听方法。
2.在监听方法里
2.1 获取当前点
2.2 获取擦除的矩形范围(以当前点为中心,擦除当前点四周指定范围)
2.3 开启上下文
2.4 把控件上的layer渲染到上下文中
2.5 擦除图片
2.6 把生成的新图片赋给原来的imageView
代码:
- (void)viewDidLoad {
[super viewDidLoad];
// 给控制器添加pan手势
UIPanGestureRecognizer *panGesutre = [[UIPanGestureRecognizer alloc] initWithTarget:self action: @selector(pan:)];
[self.view addGestureRecognizer:panGesutre];
}
- (void)pan:(UIPanGestureRecognizer *)panGesture
{
//1.获取当前点
CGPoint currentPoint = [panGesture locationInView:self.view];
//2.获取擦除的矩形范围
CGFloat wipeWidth = 30;
CGFloat wipeHeight = 30;
CGFloat wipeX = currentPoint.x - wipeWidth * 0.5;
CGFloat wipeY = currentPoint.y - wipeHeight * 0.5;
CGRect rect = CGRectMake(wipeX, wipeY, wipeWidth, wipeHeight);
//3.开启上下文
UIGraphicsBeginImageContextWithOptions(self.view.frame.size, NO, 0);
CGContextRef ctx = UIGraphicsGetCurrentContext();
//4.控件的layer渲染上去
[self.imageView.layer renderInContext:ctx];
//5.擦除图片
CGContextClearRect(ctx, rect);
//6.生成一张新的图片
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
self.imageView.image = image;
}
效果演示:
![](https://img-blog.csdn.net/20160511101213238?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
图片素材分享:撕衣服游戏图片素材
撕衣服游戏的原理就是用两张几乎一样的照片(两张照片的区别就是一张比较保守,一张比较开放,实质是设计师在原本开放的模特照片上P了一层衣服),把开放的图片放在下面,把保守的图片放在上面(每一张图片都放在一张imageView上)。撕衣服的过程也就是擦除图片的过程,把手势接触过的地方图片擦除。
步骤:
1.给控制器添加pan手势,并设置监听方法。
2.在监听方法里
2.1 获取当前点
2.2 获取擦除的矩形范围(以当前点为中心,擦除当前点四周指定范围)
2.3 开启上下文
2.4 把控件上的layer渲染到上下文中
2.5 擦除图片
2.6 把生成的新图片赋给原来的imageView
代码:
- (void)viewDidLoad {
[super viewDidLoad];
// 给控制器添加pan手势
UIPanGestureRecognizer *panGesutre = [[UIPanGestureRecognizer alloc] initWithTarget:self action: @selector(pan:)];
[self.view addGestureRecognizer:panGesutre];
}
- (void)pan:(UIPanGestureRecognizer *)panGesture
{
//1.获取当前点
CGPoint currentPoint = [panGesture locationInView:self.view];
//2.获取擦除的矩形范围
CGFloat wipeWidth = 30;
CGFloat wipeHeight = 30;
CGFloat wipeX = currentPoint.x - wipeWidth * 0.5;
CGFloat wipeY = currentPoint.y - wipeHeight * 0.5;
CGRect rect = CGRectMake(wipeX, wipeY, wipeWidth, wipeHeight);
//3.开启上下文
UIGraphicsBeginImageContextWithOptions(self.view.frame.size, NO, 0);
CGContextRef ctx = UIGraphicsGetCurrentContext();
//4.控件的layer渲染上去
[self.imageView.layer renderInContext:ctx];
//5.擦除图片
CGContextClearRect(ctx, rect);
//6.生成一张新的图片
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
self.imageView.image = image;
}
效果演示:
图片素材分享:撕衣服游戏图片素材
相关文章推荐
- 【已解决】Eclipse的java代码出错:The import org.apache cannot be resolved
- Git命令家底儿及Git数据通信原理详解
- sql日期格式化
- SQL获取每月最后一天记录
- 作为首席架构师如何做好
- IOS高级开发~Runtime(二)
- IOS高级开发~Runtime(一)
- C++ TR1 智能指针shared_ptr的使用(转)
- 从Google学到的厕所文化
- SVN1.7.14上配置post_commit hooks,实现自动发邮件功能
- Linux内核版本发布时间整理,linux内核发布时间
- TensorFlow学习笔记之三——适合入门的一些资源
- redis入门指南-安装redis
- TCP/IP详解学习笔记(1)-基本概念
- 解决Ubuntu下Firefox+OpenJDK没有Java插件的问题
- 关于width与padding
- 回车和换行
- VMware EXSi5.5 添加虚拟共享磁盘
- 【bzoj3702】二叉树 权值线段树
- jq输入框内容实时预览插件