iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 28
0
自我挑戰組

打造專案管理 iOS App 系列 第 28

# 安能取熊掌而捨魚? 玩轉陰影

  • 分享至 

  • xImage
  •  

安能取熊掌而捨魚? 玩轉陰影

陰影可以讓使用者介面變得更加美觀,更有質感,更有層次。因此學會使用陰影已經變成工程師必學的一項技術。

陰影的屬性

所有子類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


上一篇
安能取熊掌而捨魚? 便捷初始化器語法
下一篇
UIView , UIViewController Life Cycle 常見問題
系列文
打造專案管理 iOS App 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言