【iOS】mask的一种应用场景

学习文章

高级mask应用

效果

Mask1.gif
Mask2.gif

源码


import UIKit

class ViewController: UIViewController {
    
    var movedMask:CALayer?
    

    override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = UIColor.blackColor()
        
        mask()
        
//        emitterMask()
        
    }
    
    func handlePan(recongnizer: UIPanGestureRecognizer) {
    
        // 拖拽
        let translation: CGPoint = recongnizer.translationInView(view)
        recongnizer.view?.center = CGPoint(x: (recongnizer.view?.center.x)! + translation.x, y: (recongnizer.view?.center.y)! + translation.y)
        recongnizer.setTranslation(CGPoint(x: 0, y: 0), inView: view)
        
        // 关闭CoreAnimation实时隐式动画绘制(核心)
        CATransaction.setDisableActions(true)
        movedMask?.position = (recongnizer.view?.center)!
    }
    
    func mask() {
    
        // 背景图片与mask图片
        let backgroundImage: UIImage = UIImage(named: "background")!
        let maskImage:       UIImage = UIImage(named: "mask")!
        
        // 背景图片显示
        let backgroundIV: UIImageView = UIImageView(frame: view.bounds)
        backgroundIV.image = backgroundImage.grayScale()
        view.addSubview(backgroundIV)
        
        // 遮罩图片显示
        let backgroundChangedIV: UIImageView = UIImageView(frame: view.bounds)
        backgroundChangedIV.image = backgroundImage
        view.addSubview(backgroundChangedIV)
        
        // 形成遮罩
        movedMask = CALayer()
        movedMask?.frame = CGRect(origin: CGPointZero, size: maskImage.size)
        movedMask?.contents = maskImage.CGImage
        movedMask?.position = view.center
        backgroundChangedIV.layer.mask = movedMask
        
        // 拖拽的view
        let dragView: UIView = UIView(frame: CGRect(origin: CGPointZero, size: maskImage.size))
        dragView.center = view.center
        view.addSubview(dragView)
        
        // 给dragView添加拖拽手势
        let pan: UIPanGestureRecognizer = UIPanGestureRecognizer(target: self, action: "handlePan:")
        dragView.addGestureRecognizer(pan)
    }
    
    func emitterMask() {
    
        // 创建粒子layer
        let snowEmitter: CAEmitterLayer = CAEmitterLayer()
        
        // 粒子发射位置
        snowEmitter.emitterPosition = CGPoint(x: 120, y: 0)
        
        // 发射源的尺寸大小
        snowEmitter.emitterSize = view.bounds.size
        
        // 发射模式
        snowEmitter.emitterMode = kCAEmitterLayerSurface
        
        // 发射源的形状
        snowEmitter.emitterShape = kCAEmitterLayerLine
        
        // 创建雪花类型的粒子
        let snowFlake: CAEmitterCell = CAEmitterCell()
        
        // 粒子的名字
        snowFlake.name = "snow"
        
        // 粒子参数的速度乘数因子
        snowFlake.birthRate = 15
        snowFlake.lifetime  = 60
        
        // 粒子速度
        snowFlake.velocity = 10
        
        // 粒子的速度范围
        snowFlake.velocityRange = 10
        
        // 粒子y方向的加速度分量
        snowFlake.yAcceleration = 20
        
        // 周围发射角度
        snowFlake.emissionRange = CGFloat(0.5 * M_PI)
        
        // 子旋转角度范围
        snowFlake.spinRange = CGFloat(0.25 * M_PI)
        snowFlake.contents  = UIImage(named: "snow")?.CGImage
        
        // 设置雪花形状粒子的颜色
        snowFlake.color = UIColor.whiteColor().CGColor
        
        snowFlake.scale      = 0.2
        snowFlake.scaleRange = 0.2
        
        snowEmitter.shadowOpacity = 1
        snowEmitter.shadowRadius  = 0
        snowEmitter.shadowOffset  = CGSizeZero
        
        // 粒子边缘的颜色
        snowEmitter.shadowColor = UIColor.whiteColor().CGColor
        
        // 添加粒子
        snowEmitter.emitterCells = [snowFlake]
        
        // 将粒子layer添加进图层
        view.layer.addSublayer(snowEmitter)
        
        // 形成遮罩
        let maskImage: UIImage = UIImage(named: "mask")!
        movedMask = CALayer()
        movedMask?.frame = CGRect(origin: CGPointZero, size: maskImage.size)
        movedMask?.contents = maskImage.CGImage
        movedMask?.position = view.center
        snowEmitter.mask = movedMask
        
        // 拖拽的view
        let dragView: UIView = UIView(frame: CGRect(origin: CGPointZero, size: maskImage.size))
        dragView.center = view.center
        view.addSubview(dragView)
        
        // 给dragView添加拖拽手势
        let pan: UIPanGestureRecognizer = UIPanGestureRecognizer(target: self, action: "handlePan:")
        dragView.addGestureRecognizer(pan)
        
    }
}

下载源码

下载地址

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 177,325评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,839评论 4 61
  • 我想封缄口舌 不想吃饭 不想动 只想安安静静坐着 坐在我的城里 看云看花又看海 甚至想看破红尘 投身云雾烟海 佛祖...
    风与阅读 514评论 1 2
  • 里里大耳朵阅读 1,441评论 0 0
  • 我觉得我现在就是一个24岁的人该有的样子,天真烂漫,有一点儿社会经验,又不是那么成熟,知道一些事情,也接受一些事情...
    独立小桥风满袖_96ff阅读 2,905评论 0 0

友情链接更多精彩内容