用 UIViewPropertyAnimator 实现 Blur 级别的控制

栏目: IOS · 发布时间: 7年前

内容简介:iOS 开发中有时会涉及到模糊效果的处理,UIKit 原生有个同样的思路,也可以尝试着用到其他视图属性效果上。

iOS 开发中有时会涉及到模糊效果的处理,UIKit 原生有个 UIVisualEffectView 能够支持对视图进行模糊效果处理,但设计师有时会觉得原生的 blur 效果太重,想要轻一些,那怎么处理呢?当然,可以选择一些第三方或者自己实现对视图的模糊处理,如果不能那么麻烦呢?可以采用 UIViewPropertyAnimator 达到该要求。

// 以下代码可直接在`Playground`上运行看到效果
class BlurDemoViewController: UIViewController {
    let imageView = UIImageView()
    
    let effectView = UIVisualEffectView(effect: UIBlurEffect(style: .light))
    
    var animator: UIViewPropertyAnimator?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        imageView.frame = view.bounds
        imageView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        imageView.contentMode = .scaleAspectFill
        view.addSubview(imageView)
        
        effectView.frame = view.bounds
        effectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        view.addSubview(effectView)
        
	    // 核心代码,控制 animator 的 fractionComplete 值即可控制 blur 的级别,另外, duration 在这并不重要,因为我们将手动设置 animator 的完成度
        animator = UIViewPropertyAnimator(duration: 1, curve: .linear) {
            // 这里是核心,这样控制 fractionComplete 就可以控制视图的模糊效果在系统默认级别和无模糊效果之间过渡了
            self.effectView.effect = nil
        }
        
        // Slider 用于控制模糊效果级别的演示
        let slider = UISlider()
        slider.frame.origin.x = 20
        slider.frame.origin.y = view.frame.size.height - slider.frame.size.height - 20
        slider.frame.size.width = view.frame.size.width - 40
        slider.autoresizingMask = [.flexibleWidth, .flexibleTopMargin]
        slider.addTarget(self, action: #selector(sliderValueChanged), for: .valueChanged)
        view.addSubview(slider)
    }
    
    @objc private func sliderValueChanged(sender: UISlider) {
        // 控制 animator 的完成度以达到控制 Blur 级别的效果
        animator?.fractionComplete = CGFloat(sender.value)
    }
}

let vc = BlurDemoViewController()
vc.imageView.image = UIImage(named: "Test")

//vc.effectView.effect = UIBlurEffect(style: .dark)
//vc.effectView.effect = UIBlurEffect(style: .extraLight)

import PlaygroundSupport
PlaygroundPage.current.liveView = vc

复制代码

同样的思路,也可以尝试着用到其他视图属性效果上。


以上所述就是小编给大家介绍的《用 UIViewPropertyAnimator 实现 Blur 级别的控制》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数字乌托邦

数字乌托邦

[美]弗雷德·特纳 / 张行舟、王芳、叶富华、余倩 / 译言·东西文库/电子工业出版社 / 2013-5-1 / 49.80元

20世纪60年代早期,在美国大众眼中,计算机只是冷战中冰冷的机器,然而到了90年代互联网到来之时,计算机却呈现出一个截然不同的世界——它们模拟出了一个数字乌托邦般的协同体,而这正是曾经最反对冷战的嬉皮士们的共同愿景。 本书正是探索这次非同寻常,且颇具讽刺意味的变革的第一本书。作者挖掘出那些在旧金山湾区的先驱者——斯图尔特·布兰德和他的“全球网络”鲜为人知的故事。1968年到1998年期间,通......一起来看看 《数字乌托邦》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具