運用 UIBezierPath 繪製神隱無臉男

為何挑選「無臉男」下手呢?原因無他,就是看中他的單純無瑕(是比較簡單好畫吧️~🤫🤫)。不囉嗦,趕緊從程式一步一腳印的將單純無瑕的無臉男畫出來吧!

作品簡介

利用 SwiftUI 快速預覽 UIBezierPath 的繪圖結果,拉出作品所需之㰐圓及曲線圖形,並運用 CGAffineTransform 的旋轉功能,繪製左右眼之對稱圖案。

改變圓形長寬比例創造不同表情的無臉男,如無辜臉、扁嘴臉和驚訝臉。

無臉男組圖 Screenshots

作品 DEMO

圖形分解動作 Demo

使用三個 Sublayer 裝載大臉、嘴巴及嘴下的紫色彩繪,以及二個 Subview 裝載左眼區圖形及右眼區圖形。

let view = UIView()view.layer.addSublayer(layerFace)
view.layer.addSublayer(layerMouth)
leftView.layer.addSublayer(layerLeftEyeBtm)
view.addSubview(leftView)
view.addSubview(rightView)

運用 addQuadCurve 拉出眼睛上下方的彩繪條曲線。

let pathEyePaintTop = UIBezierPath()
pathEyePaintTop.move(to: CGPoint(x: 110, y: 130))
pathEyePaintTop.addQuadCurve(to: CGPoint(x: 150, y: 130), controlPoint: CGPoint(x: 145, y: -80))

利用 CGAffineTransform 鏡像翻轉功能使右眼區圖形左右對稱於左眼區。

rightView.transform = CGAffineTransform(scaleX: -1, y: 1)

重新指向 layerMouth 的 path 使其改變形狀創造出不同表情。

let pathWideMouth = UIBezierPath(ovalIn: CGRect(x: 100, y: 550, width: 220, height: 30))
layerMouth.path = pathWideMouth.cgPath

作品 GitHub

--

--