刮奖是商家类项目中经常使用的组件,其实现方式也有多种,下面介绍一种使用Core Graphics实现的一种方式。
Core Graphics中有一种根据遮罩图片(Masking Images)和原图片最终合成位图的方法,下面看一个官方文档给出的效果来一个直观的展示。
从中可以看到黑色的部分将原图显示了出来,白色的部分把原图遮住了,灰色的部分和原图经过一定的算法进行了合成。我们可以通过不断的改变遮罩层中某部分的颜色,最终产生刮奖的效果。具体步骤如下:
从中可以看出,刚开始产生的Marsk是黑色的,这时合成之后蒙层图片原样展示,手指一动的时候往mask上绘制了白色的线条,这样,合成之后蒙层上被划过的地方被白色所取代,这样就出现了刮奖的效果,在每次绘制完成之后只需要调用setNeedsDisplay
方法,然后在drawRect
方法中不断展现最终合成的图片即可。
具体的代码如下:
1 | CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceGray(); |
手指滑动时候调用的方法:
1 | - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { |