概述

仿支付宝刮刮乐效果, 可以按照自己需求更改展示刮出来的效果的view(即刮开后刮刮乐效果展示)

详细

支付宝里有个刮刮乐中奖, 和大街小巷里的类似彩票刮刮乐的效果一样。

一、实现思路

其实很简单的三步:

  • 1. 展示刮出来的效果的view: 即刮开后刮刮乐效果展示-显示的文字Label

  • 2. 设置遮挡在外面的Image(被刮的图片)

  • 3. 在touchesMoved方法里面实现操作: 刮开图片获取文字

二、程序实现

虽然思路简单,但是还需要注意:

1. 这两个控件的位置切记要相同!

2. 一定要先创建下面的展示刮出来的效果控件的, 再创建上面的被刮的图片控件!

下面就直接上核心代码!

  1. 展示刮开出来的效果:显示的文字 label

 UILabel *showLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 274, 145)];
showLabel.center = self.view.center;
showLabel.backgroundColor = [UIColor redColor];
showLabel.textColor = [UIColor yellowColor];
showLabel.text = @"恭喜你中奖了";
showLabel.font = [UIFont systemFontOfSize:30];
showLabel.textAlignment = NSTextAlignmentCenter;
[self.view addSubview:showLabel];

2. 设置遮挡在外面的Image(被刮的图片)

    UIImageView *scratchedImg = [[UIImageView alloc] initWithFrame:showLabel.frame];
scratchedImg.image = [UIImage imageNamed:@"scratched"];
[self.view addSubview:scratchedImg];
self.scratchedImg = scratchedImg;

3. 在touchesMoved方法里面实现操作

- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {

    // 触摸任意位置
UITouch *touch = touches.anyObject;
// 触摸位置在图片上的坐标
CGPoint cententPoint = [touch locationInView:self.scratchedImg];
// 设置清除点的大小
CGRect rect = CGRectMake(cententPoint.x, cententPoint.y, 20, 20);
// 默认是去创建一个透明的视图
UIGraphicsBeginImageContextWithOptions(self.scratchedImg.bounds.size, NO, 0);
// 获取上下文(画板)
CGContextRef ref = UIGraphicsGetCurrentContext();
// 把imageView的layer映射到上下文中
[self.scratchedImg.layer renderInContext:ref];
// 清除划过的区域
CGContextClearRect(ref, rect);
// 获取图片
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
// 结束图片的画板, (意味着图片在上下文中消失)
UIGraphicsEndImageContext(); self.scratchedImg.image = image;
}

三、压缩文件截图及运行效果

1、压缩文件截图:

2、运行时的截图

四、其他补充

界面性问题可以根据自己项目需求调整即可, 具体可参考代码, 项目能够直接运行!

注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权

最新文章

  1. eclipse 快捷键大全(转载)
  2. 第二章 NIO入门
  3. 对dijkstra算法的自我理解,c#例子
  4. 昨天用的流量有点多60M
  5. JAVA 什么时候使用静态
  6. 44、自定义仿IOS对话框
  7. android学习日记04--开发中的通用细节
  8. Linux命令总结(转载)
  9. Match+Faq
  10. 合并多个python list以及合并多个 django QuerySet 的方法
  11. seaJs组建库
  12. android中全局异常捕捉
  13. 【Codeforces Round 438 A B C D 四个题】
  14. udacity/CarND-Path-Planning-Project 工程详细配置过程——吐血整理
  15. Mybatis(二)入门程序-通过id查找用户、模糊查找用户、添加用户、删除用户
  16. Python下载及Python最强大IDEPyCharm下载链接
  17. 剑指Offer 43. 左旋转字符串 (字符串)
  18. python 面向对象的类
  19. js异步刷新局部页面
  20. 20165311学习基础和C语言基础调查

热门文章

  1. ExtJS GridPanel的ColumnModel 动态加载
  2. ACM-DP之最大连续子序列——hdu1231
  3. go语言 defer 高级
  4. idea 配置简单web
  5. C++中二维数组的动态分配
  6. 第十六章 springboot + OKhttp + String.format
  7. C# 实现PNG文件的背景透明显示,解决动态显示闪烁问题 【转】
  8. SQL Server中数据的修改是如何落盘的?
  9. Steps to configure a FileShare Quorum Witness for Windows Failover Cluster
  10. android 百度地图demo 随感