内容简介: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 级别的控制》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Vue 指令实现按钮级别权限管理
- 4 种事务的隔离级别,InnoDB 如何巧妙实现?
- LMAX微服务级别的分布式事务实现
- 原 荐 多路复用实现单服百万级别RPS吞吐
- Logback中使用TurboFilter实现日志级别等内容的动态修改
- 千万级别数据 20 秒内反馈,携程酒店智能监控平台如何实现?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。