iOS刮刮樂實(shí)現(xiàn)

前言

突然看到支付寶的刮刮卡功能,閑來無事,寫了一個(gè)小demo。

步驟及思路

    1. UI布局;
    1. 獲取觸摸位置在圖片上的坐標(biāo);
    1. 默認(rèn)是去創(chuàng)建一個(gè)透明的視圖;
    1. 獲取上下文(畫板);
    1. 將圖片渲染在上下文中;
    1. 設(shè)置清除點(diǎn)的大?。?/li>
    1. 清除劃過的區(qū)域;
    1. 獲取通過上下文合成圖片;
    1. 關(guān)閉上下文;
    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
        // 觸摸位置在圖片上的坐標(biāo)
        let cententPoint = touch?.location(in: imageView) ?? CGPoint.zero
        // 設(shè)置清除點(diǎn)的大小
        let rect = CGRect(x: cententPoint.x, y: cententPoint.y, width: 30.0, height: 30.0)
        // 默認(rèn)是去創(chuàng)建一個(gè)透明的視圖
        UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, false, 0)
        // 獲取上下文(畫板)
        guard let ref = UIGraphicsGetCurrentContext() else {
            return
        }
        // 把imageView的layer映射到上下文中
        imageView.layer.render(in: ref)
        
        // 清除劃過的區(qū)域
        ref.clear(rect)
        
        // 獲取圖片
        let image = UIGraphicsGetImageFromCurrentImageContext()
        
        // 結(jié)束圖片的畫板, (意味著圖片在上下文中消失)
        UIGraphicsEndImageContext()
        imageView.image = image
    }
}

Author

如果你有什么建議,可以關(guān)注我,直接留言,留言必回。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容