# 安能取熊掌而舍鱼? 玩转阴影

安能取熊掌而舍鱼? 玩转阴影

阴影可以让使用者介面变得更加美观,更有质感,更有层次。因此学会使用阴影已经变成工程师必学的一项技术。

阴影的属性

所有子类UIView,都可以看到layer里面的属性,我们可以在程序码中直接套用阴影效果属性。我们来看看可以设定参数:

  1. shadowColor:控制阴影的颜色,并可用於制作阴影(深色)或发光(浅色)。默认为黑色。
  2. shadowOffset:控制阴影从其视线移开的距离。默认情况下,视图向上3点。
  3. shadowOpacity控制阴影的透明度。默认为0,表示“不可见”。
  4. shadowPath控制阴影的形状。默认为nil,这将导致UIKit在屏幕外渲染视图以找出阴影形状。
  5. shadowRadius控制阴影的模糊程度。默认为3分。

接下来带大家玩转阴影

1. 平民式阴影

所谓的平民式阴影就是什麽属性都不调,一昧地用预设。

vw.layer.shadowOpacity = 1

2. 浮岛式阴影

浮岛式阴影是使视图看起来接近甚至接触曲面的一种,因此阴影直接存在於视图下方,而不是围绕视图。

vw.layer.shadowPath = UIBezierPath(rect: vw.bounds).cgPath
vw.layer.shadowRadius = 5
vw.layer.shadowOffset = .zero
vw.layer.shadowOpacity = 1

3. 站立式阴影

 let shadowSize: CGFloat = 20
        let contactRect = CGRect(x: -shadowSize, y: vw.frame.height - (shadowSize * 0.4), width: vw.frame.width + shadowSize * 2, height: shadowSize)
        vw.layer.shadowPath = UIBezierPath(ovalIn: contactRect).cgPath
        vw.layer.shadowRadius = 5
        vw.layer.shadowOpacity = 0.4

站立式阴影,可以让视就像站立起来。看起来画面更生动了。

地爆天星阴影

没有轮回眼,也可以使用地爆天星阴影,让视图飞到天上去,留下美美的阴影。

let shadowSize: CGFloat = 10
        let shadowDistance: CGFloat = 40
        let contactRect = CGRect(x: shadowSize, y: vw.frame.height - (shadowSize * 0.4) + shadowDistance, width: vw.frame.width - shadowSize * 2, height: shadowSize)
        vw.layer.shadowPath = UIBezierPath(ovalIn: contactRect).cgPath
        vw.layer.shadowRadius = 5
        vw.layer.shadowOpacity = 0.4

旭日东昇阴影

let shadowWidth: CGFloat = 1.2
        let shadowHeight: CGFloat = 0.5
        let shadowOffsetX: CGFloat =  -50
        let shadowRadius: CGFloat = 5

        let shadowPath = UIBezierPath()
        shadowPath.move(to: CGPoint(x: shadowRadius / 2, y: vw.frame.height - shadowRadius / 2))
        shadowPath.addLine(to: CGPoint(x: vw.frame.width, y: vw.frame.height - shadowRadius / 2))
        shadowPath.addLine(to: CGPoint(x: vw.frame.width * shadowWidth + shadowOffsetX, y: vw.frame.height + (vw.frame.height * shadowHeight)))
        shadowPath.addLine(to: CGPoint(x: vw.frame.width * -(shadowWidth - 1) + shadowOffsetX, y: vw.frame.height + (vw.frame.height * shadowHeight)))
        vw.layer.shadowPath = shadowPath.cgPath

        vw.layer.shadowRadius = shadowRadius
        vw.layer.shadowOffset = .zero
        vw.layer.shadowOpacity = 0.2


<<:  Day28-移动侦测2

>>:  Day-28 了解 Namespace 与 Rbac

Day.1 起点 - 前言 ( Percona Server )

在这30天的文章中分享藉由在工作上学习资料库管理相关的一些心得笔记与一些经验分享和操作纪录,希望能...

Day 9 - HTML

前言 说起HTML, 大家觉得它如何? 相比起JavaScript, HTML不是什麽program...

[Day 4]餐前浓汤-Vagrant环境设定及BeautifulSoup安装

昨天我们介绍了Python跟Vagrant这两个东东是干啥的 以及这两个东东如何安装 今天我们会把剩...

在 Clear Linux 上安装 Google Chrome

一、前言 Linux 上面多半有 Firefox,为什麽我还大费周章安装 Google Chrome...

[Day6] 注册API – model之AbstractUser

各位夥伴们大家好,今天是我们进入API阶段的第一天,在撰写API的逻辑之前,我们需要先到user\m...