iOS-仿支付宝刮刮乐效果
概述
仿支付宝刮刮乐效果, 可以按照自己需求更改展示刮出来的效果的view(即刮开后刮刮乐效果展示)
详细
支付宝里有个刮刮乐中奖, 和大街小巷里的类似彩票刮刮乐的效果一样。
一、实现思路
其实很简单的三步:
-
1. 展示刮出来的效果的view: 即刮开后刮刮乐效果展示-显示的文字Label
-
2. 设置遮挡在外面的Image(被刮的图片)
-
3. 在touchesMoved方法里面实现操作: 刮开图片获取文字
二、程序实现
虽然思路简单,但是还需要注意:
1. 这两个控件的位置切记要相同!
2. 一定要先创建下面的展示刮出来的效果控件的, 再创建上面的被刮的图片控件!
下面就直接上核心代码!
-
展示刮开出来的效果:显示的文字 label
1 2 3 4 5 6 7 8 | 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(被刮的图片)
1 2 3 4 | UIImageView *scratchedImg = [[UIImageView alloc] initWithFrame:showLabel.frame]; scratchedImg.image = [UIImage imageNamed:@ "scratched" ]; [self.view addSubview:scratchedImg]; self.scratchedImg = scratchedImg; |
3. 在touchesMoved方法里面实现操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | - ( 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、运行时的截图
四、其他补充
界面性问题可以根据自己项目需求调整即可, 具体可参考代码, 项目能够直接运行!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?