iOS刮刮乐实现

作者: __Mr_Xie__ | 来源:发表于2019-07-05 17:23 被阅读5次

前言

突然看到支付宝的刮刮卡功能,闲来无事,写了一个小demo。

步骤及思路

    1. UI布局;
    1. 获取触摸位置在图片上的坐标;
    1. 默认是去创建一个透明的视图;
    1. 获取上下文(画板);
    1. 将图片渲染在上下文中;
    1. 设置清除点的大小;
    1. 清除划过的区域;
    1. 获取通过上下文合成图片;
    1. 关闭上下文;
    1. 将合成的图片添加在imageView上;

效果

示例代码

Swift版demo地址
OC版demo地址

import UIKit

class ViewController: UIViewController {
    
    lazy var imageView: UIImageView = {
        let imageView = UIImageView(frame: CGRect.zero)
        imageView.image = UIImage(named: "gray")
        return imageView
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        setupView()
    }
    
    func setupView() {
        // 下面的图片
        let belowImg = UIImage(named: "ten")
        let belowImgView = UIImageView(image: belowImg)
        belowImgView.frame = CGRect(x: 0, y: 0, width: belowImg?.size.width ?? 0, height: belowImg?.size.height ?? 0)
        belowImgView.center = view.center
        view.addSubview(belowImgView)
        
        // 灰色图片
        imageView.frame = belowImgView.frame
        view.addSubview(imageView)
    }
    
    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
        let touch = touches.first
        // 触摸位置在图片上的坐标
        let cententPoint = touch?.location(in: imageView) ?? CGPoint.zero
        // 设置清除点的大小
        let rect = CGRect(x: cententPoint.x, y: cententPoint.y, width: 30.0, height: 30.0)
        // 默认是去创建一个透明的视图
        UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, false, 0)
        // 获取上下文(画板)
        guard let ref = UIGraphicsGetCurrentContext() else {
            return
        }
        // 把imageView的layer映射到上下文中
        imageView.layer.render(in: ref)
        
        // 清除划过的区域
        ref.clear(rect)
        
        // 获取图片
        let image = UIGraphicsGetImageFromCurrentImageContext()
        
        // 结束图片的画板, (意味着图片在上下文中消失)
        UIGraphicsEndImageContext()
        imageView.image = image
    }
}

Author

如果你有什么建议,可以关注我的公众号:iOS开发者进阶,直接留言,留言必回。

相关文章

  • iOS刮刮乐实现

    前言 突然看到支付宝的刮刮卡功能,闲来无事,写了一个小demo。 步骤及思路 UI布局; 获取触摸位置在图片上的坐...

  • iOS “刮刮乐”的简单实现

    这两天闲来无事,做一个“刮刮乐”的小功能给大家乐一乐。哈哈哈,先来看看效果图: 这个女朋友奖很简单就可以实现:1....

  • iOS中刮刮乐功能的实现

    目前很多项目中都会用到“刮刮乐”这个功能点,处于此整理出了一套比较easy的实现方法。 在这里我主要用到了Imag...

  • iOS开发 刮刮乐效果的实现

    引言 我们平时在使用支付宝的时候, 会看到类似彩票刮刮乐的效果。如何实现的呢?下面就直接上代码了... 刮刮乐效果...

  • 刮刮乐

  • 刮刮乐

    2007年3月3日,特别的日子。 为啥特别? 第一次坐飞机,青岛飞西安,提前4个小时就到机场了,在网上研究过攻略,...

  • 刮刮乐

    2014年11月3日 刮刮乐 今天杏子又在济南火车站候车了,这次她是故地重游,明显轻松了许多。 ...

  • 刮刮乐

    设置刮开后,显示的文字Label UILabel *label = [[UILabel alloc]initWit...

  • 刮刮乐

    刮刮乐这个东西真的是越刮越快乐,尤其是他给我准备的30张,现在有些喜欢30这个数字了,哈哈哈哈哈! 他给我准备...

  • 刮刮乐

    最近幻想中奖挣大钱的两个人于今晚走进彩票店刮起了刮刮乐,五块钱一张,最后刮了六张,付了十块钱,而我依然是好运绝缘体...

网友评论

    本文标题:iOS刮刮乐实现

    本文链接:https://www.haomeiwen.com/subject/gziehctx.html