[IOS APP]中華民國萬歲!🇹🇼國旗製作🇹🇼

一看到要製作國旗,讓我第一個想到的就是我站的這片土地------台灣🇹🇼!

台灣國旗是由青天白日滿地紅所組成,想一想青天和滿地紅應該都還

算簡單甚至是白日的那個圓,最最最困難的絕對就是那12道光芒!但又覺

得一定要做出來!!雖然路途艱辛,過程中也如想像的一般處處碰壁,跌

的頭破血流,不過關關難過關關過,有我們最優秀的Peter指點迷津,讓我

在愛台灣的同時又不被艱難打敗,真是我們最強大的後盾~~

廢話了這麼多,終於可以開始我們的主題了!!首先先上了Wikipedia來看

看我們國旗的規格~

果然是非常的詳細,連顏色都有,真是一應俱全,可是我要的是RGB呀!

於是只好再利用線上轉換器來轉換,到目前為止都還是很順利的進行。

Part1滿地紅

let frame1 = CGRect(x: 0, y: 0, width: 120, height:80)var rectRed = UIView(frame: frame1)rectRed.backgroundColor = UIColor(red: 242/255, green: 0, blue: 0, alpha: 1)let flagRedPath = UIBezierPath()var point = CGPoint(x: 60, y: 0)flagRedPath.move(to: point)point = CGPoint(x: 120, y: 0)flagRedPath.addLine(to: point)point = CGPoint(x: 120, y: 80)flagRedPath.addLine(to: point)point = CGPoint(x: 0, y: 80)flagRedPath.addLine(to: point)point = CGPoint(x: 0, y: 40)flagRedPath.addLine(to: point)point = CGPoint(x: 60, y: 40)flagRedPath.addLine(to: point)point = CGPoint(x: 60, y: 0)flagRedPath.close()let maskLayer0 = CAShapeLayer()maskLayer0.path = flagRedPath.cgPathrectRed.layer.mask = maskLayer0rectRed

利用Peter的秘笈來完成第一個部分,也順利的過關!

Part2青天

let frame2 = CGRect(x: 0, y: 0, width: 60, height: 40)var rectBlue = UIView(frame: frame2)rectBlue.backgroundColor = UIColor(red: 0, green: 41/255, blue: 204/255, alpha: 1)rectBlue

也是最容易的部分

可是沒想到把青天滿地紅做結合時卻讓我遇到了第一的問題,第一次的

Call out出現了,原來只要再用一個新的View來裝下其他的,便迎刃而解!

let view = UIView(frame: CGRect(x: 0, y: 0, width: 120, height: 80))view.addSubview(rectRed)print(rectBlue.frame)view.addSubview(rectBlue)

Part3白日

let frame3 = CGRect(x: 22.5, y: 12.5, width: 60/4, height: 60/4)var rectWhite = UIView(frame: frame3)rectWhite.backgroundColor = UIColor(red: 1, green: 1, blue: 1, alpha: 1)rectWhite.layer.cornerRadius = 60/8rectWhite

稍微算了一下位置,也是順利的通過~

Part412道光芒

這裡是所有過程中最困難的地方,也是第二次的Call out~

關卡1 三角形的製作

一樣先利用什麼的CAShapeLayer和mask來描繪三角形的輪廓,但三角形的

三點座標不如滿地紅的一樣和藹可親一眼可知,只好利用曾經學過的三角

函數又正好旁邊有紙筆,搭配凌亂的筆跡,終於讓我完成第一個三角形!

let frame4 = CGRect(x: 0, y: 0, width: 60, height: 40)var rectWhiteTriangle = UIView(frame: frame4)rectWhiteTriangle.backgroundColor = UIColor(red: 1, green: 1, blue: 1, alpha: 1)let flagWhiteTriangle = UIBezierPath()var point1 = CGPoint(x: 120/4, y: 40/8)flagWhiteTriangle.move(to: point1)point1 = CGPoint(x: 30+6.5*tan(Double.pi/12), y: (40-17)/2)flagWhiteTriangle.addLine(to: point1)point1 = CGPoint(x: 30-6.5*tan(Double.pi/12), y: (40-17)/2)flagWhiteTriangle.addLine(to: point1)point1 = CGPoint(x: 120/4, y: 40/8)flagWhiteTriangle.close()let maskLayer1 = CAShapeLayer()maskLayer1.path = flagWhiteTriangle.cgPathrectWhiteTriangle.layer.mask = maskLayer1

關卡2 其他11個三角形

想當然其他的11個三角形不可能再用座標一個一個描繪出來,勢必是需要

利用旋轉的概念來完成,但是我還不會旋轉呀!!!!還好雖然我不會旋

轉但是我有一個堅強的後盾Peter,原來只需一個指令世界便開始旋轉了!

var rectWhiteTriangle2 = UIView(frame: frame4)rectWhiteTriangle2.backgroundColor = UIColor(red: 1, green: 1, blue: 1, alpha: 1)let flagWhiteTriangle2 = UIBezierPath()var point2 = CGPoint(x: 120/4, y: 40/8)flagWhiteTriangle2.move(to: point2)point2 = CGPoint(x: 30+6.5*tan(Double.pi/12), y: (40-17)/2)flagWhiteTriangle2.addLine(to: point2)point2 = CGPoint(x: 30-6.5*tan(Double.pi/12), y: (40-17)/2)flagWhiteTriangle2.addLine(to: point2)point2 = CGPoint(x: 120/4, y: 40/8)flagWhiteTriangle2.close()let maskLayer2 = CAShapeLayer()maskLayer2.path = flagWhiteTriangle2.cgPathrectWhiteTriangle2.layer.mask = maskLayer2rectWhiteTriangle2.transform = CGAffineTransform(rotationAngle: CGFloat.pi/180*30)

關鍵的最後一行,讓三角形轉動了!

其餘的三角形再改變旋轉角度就可以一個一個跑出來

終於國旗誕生了,這得來不易的成果伴隨著就是久久掛在臉上難以消散

的笑容,真是太感動了!!!!

最後附上全部完整的程式碼

import UIKitlet frame1 = CGRect(x: 0, y: 0, width: 120, height:80)var rectRed = UIView(frame: frame1)rectRed.backgroundColor = UIColor(red: 242/255, green: 0, blue: 0, alpha: 1)let flagRedPath = UIBezierPath()var point = CGPoint(x: 60, y: 0)flagRedPath.move(to: point)point = CGPoint(x: 120, y: 0)flagRedPath.addLine(to: point)point = CGPoint(x: 120, y: 80)flagRedPath.addLine(to: point)point = CGPoint(x: 0, y: 80)flagRedPath.addLine(to: point)point = CGPoint(x: 0, y: 40)flagRedPath.addLine(to: point)point = CGPoint(x: 60, y: 40)flagRedPath.addLine(to: point)point = CGPoint(x: 60, y: 0)flagRedPath.close()let maskLayer0 = CAShapeLayer()maskLayer0.path = flagRedPath.cgPathrectRed.layer.mask = maskLayer0rectRedlet frame2 = CGRect(x: 0, y: 0, width: 60, height: 40)var rectBlue = UIView(frame: frame2)rectBlue.backgroundColor = UIColor(red: 0, green: 41/255, blue: 204/255, alpha: 1)rectBluelet frame3 = CGRect(x: 22.5, y: 12.5, width: 60/4, height: 60/4)var rectWhite = UIView(frame: frame3)rectWhite.backgroundColor = UIColor(red: 1, green: 1, blue: 1, alpha: 1)rectWhite.layer.cornerRadius = 60/8rectWhitelet frame4 = CGRect(x: 0, y: 0, width: 60, height: 40)var rectWhiteTriangle = UIView(frame: frame4)rectWhiteTriangle.backgroundColor = UIColor(red: 1, green: 1, blue: 1, alpha: 1)let flagWhiteTriangle = UIBezierPath()var point1 = CGPoint(x: 120/4, y: 40/8)flagWhiteTriangle.move(to: point1)point1 = CGPoint(x: 30+6.5*tan(Double.pi/12), y: (40-17)/2)flagWhiteTriangle.addLine(to: point1)point1 = CGPoint(x: 30-6.5*tan(Double.pi/12), y: (40-17)/2)flagWhiteTriangle.addLine(to: point1)point1 = CGPoint(x: 120/4, y: 40/8)flagWhiteTriangle.close()let maskLayer1 = CAShapeLayer()maskLayer1.path = flagWhiteTriangle.cgPathrectWhiteTriangle.layer.mask = maskLayer1var rectWhiteTriangle2 = UIView(frame: frame4)rectWhiteTriangle2.backgroundColor = UIColor(red: 1, green: 1, blue: 1, alpha: 1)let flagWhiteTriangle2 = UIBezierPath()var point2 = CGPoint(x: 120/4, y: 40/8)flagWhiteTriangle2.move(to: point2)point2 = CGPoint(x: 30+6.5*tan(Double.pi/12), y: (40-17)/2)flagWhiteTriangle2.addLine(to: point2)point2 = CGPoint(x: 30-6.5*tan(Double.pi/12), y: (40-17)/2)flagWhiteTriangle2.addLine(to: point2)point2 = CGPoint(x: 120/4, y: 40/8)flagWhiteTriangle2.close()let maskLayer2 = CAShapeLayer()maskLayer2.path = flagWhiteTriangle2.cgPathrectWhiteTriangle2.layer.mask = maskLayer2rectWhiteTriangle2.transform = CGAffineTransform(rotationAngle: CGFloat.pi/180*30)var rectWhiteTriangle3 = UIView(frame: frame4)rectWhiteTriangle3.backgroundColor = UIColor(red: 1, green: 1, blue: 1, alpha: 1)let flagWhiteTriangle3 = UIBezierPath()var point3 = CGPoint(x: 120/4, y: 40/8)flagWhiteTriangle3.move(to: point3)point3 = CGPoint(x: 30+6.5*tan(Double.pi/12), y: (40-17)/2)flagWhiteTriangle3.addLine(to: point3)point3 = CGPoint(x: 30-6.5*tan(Double.pi/12), y: (40-17)/2)flagWhiteTriangle3.addLine(to: point3)point3 = CGPoint(x: 120/4, y: 40/8)flagWhiteTriangle3.close()let maskLayer3 = CAShapeLayer()maskLayer3.path = flagWhiteTriangle3.cgPathrectWhiteTriangle3.layer.mask = maskLayer3rectWhiteTriangle3.transform = CGAffineTransform(rotationAngle: CGFloat.pi/180*60)var rectWhiteTriangle4 = UIView(frame: frame4)rectWhiteTriangle4.backgroundColor = UIColor(red: 1, green: 1, blue: 1, alpha: 1)let flagWhiteTriangle4 = UIBezierPath()var point4 = CGPoint(x: 120/4, y: 40/8)flagWhiteTriangle4.move(to: point4)point4 = CGPoint(x: 30+6.5*tan(Double.pi/12), y: (40-17)/2)flagWhiteTriangle4.addLine(to: point4)point4 = CGPoint(x: 30-6.5*tan(Double.pi/12), y: (40-17)/2)flagWhiteTriangle4.addLine(to: point4)point4 = CGPoint(x: 120/4, y: 40/8)flagWhiteTriangle4.close()let maskLayer4 = CAShapeLayer()maskLayer4.path = flagWhiteTriangle4.cgPathrectWhiteTriangle4.layer.mask = maskLayer4rectWhiteTriangle4.transform = CGAffineTransform(rotationAngle: CGFloat.pi/180*90)var rectWhiteTriangle5 = UIView(frame: frame4)rectWhiteTriangle5.backgroundColor = UIColor(red: 1, green: 1, blue: 1, alpha: 1)let flagWhiteTriangle5 = UIBezierPath()var point5 = CGPoint(x: 120/4, y: 40/8)flagWhiteTriangle5.move(to: point5)point5 = CGPoint(x: 30+6.5*tan(Double.pi/12), y: (40-17)/2)flagWhiteTriangle5.addLine(to: point5)point5 = CGPoint(x: 30-6.5*tan(Double.pi/12), y: (40-17)/2)flagWhiteTriangle5.addLine(to: point5)point5 = CGPoint(x: 120/4, y: 40/8)flagWhiteTriangle5.close()let maskLayer5 = CAShapeLayer()maskLayer5.path = flagWhiteTriangle3.cgPathrectWhiteTriangle5.layer.mask = maskLayer5rectWhiteTriangle5.transform = CGAffineTransform(rotationAngle: CGFloat.pi/180*120)var rectWhiteTriangle6 = UIView(frame: frame4)rectWhiteTriangle6.backgroundColor = UIColor(red: 1, green: 1, blue: 1, alpha: 1)let flagWhiteTriangle6 = UIBezierPath()var point6 = CGPoint(x: 120/4, y: 40/8)flagWhiteTriangle6.move(to: point6)point6 = CGPoint(x: 30+6.5*tan(Double.pi/12), y: (40-17)/2)flagWhiteTriangle6.addLine(to: point6)point6 = CGPoint(x: 30-6.5*tan(Double.pi/12), y: (40-17)/2)flagWhiteTriangle6.addLine(to: point6)point6 = CGPoint(x: 120/4, y: 40/8)flagWhiteTriangle6.close()let maskLayer6 = CAShapeLayer()maskLayer6.path = flagWhiteTriangle6.cgPathrectWhiteTriangle6.layer.mask = maskLayer6rectWhiteTriangle6.transform = CGAffineTransform(rotationAngle: CGFloat.pi/180*150)var rectWhiteTriangle7 = UIView(frame: frame4)rectWhiteTriangle7.backgroundColor = UIColor(red: 1, green: 1, blue: 1, alpha: 1)let flagWhiteTriangle7 = UIBezierPath()var point7 = CGPoint(x: 120/4, y: 40/8)flagWhiteTriangle7.move(to: point7)point7 = CGPoint(x: 30+6.5*tan(Double.pi/12), y: (40-17)/2)flagWhiteTriangle7.addLine(to: point7)point7 = CGPoint(x: 30-6.5*tan(Double.pi/12), y: (40-17)/2)flagWhiteTriangle7.addLine(to: point7)point7 = CGPoint(x: 120/4, y: 40/8)flagWhiteTriangle7.close()let maskLayer7 = CAShapeLayer()maskLayer7.path = flagWhiteTriangle7.cgPathrectWhiteTriangle7.layer.mask = maskLayer7rectWhiteTriangle7.transform = CGAffineTransform(rotationAngle: CGFloat.pi/180*180)var rectWhiteTriangle8 = UIView(frame: frame4)rectWhiteTriangle8.backgroundColor = UIColor(red: 1, green: 1, blue: 1, alpha: 1)let flagWhiteTriangle8 = UIBezierPath()var point8 = CGPoint(x: 120/4, y: 40/8)flagWhiteTriangle8.move(to: point8)point8 = CGPoint(x: 30+6.5*tan(Double.pi/12), y: (40-17)/2)flagWhiteTriangle8.addLine(to: point8)point8 = CGPoint(x: 30-6.5*tan(Double.pi/12), y: (40-17)/2)flagWhiteTriangle8.addLine(to: point8)point8 = CGPoint(x: 120/4, y: 40/8)flagWhiteTriangle8.close()let maskLayer8 = CAShapeLayer()maskLayer8.path = flagWhiteTriangle8.cgPathrectWhiteTriangle8.layer.mask = maskLayer8rectWhiteTriangle8.transform = CGAffineTransform(rotationAngle: CGFloat.pi/180*(-30))var rectWhiteTriangle9 = UIView(frame: frame4)rectWhiteTriangle9.backgroundColor = UIColor(red: 1, green: 1, blue: 1, alpha: 1)let flagWhiteTriangle9 = UIBezierPath()var point9 = CGPoint(x: 120/4, y: 40/8)flagWhiteTriangle9.move(to: point9)point9 = CGPoint(x: 30+6.5*tan(Double.pi/12), y: (40-17)/2)flagWhiteTriangle9.addLine(to: point9)point9 = CGPoint(x: 30-6.5*tan(Double.pi/12), y: (40-17)/2)flagWhiteTriangle9.addLine(to: point9)point9 = CGPoint(x: 120/4, y: 40/8)flagWhiteTriangle9.close()let maskLayer9 = CAShapeLayer()maskLayer9.path = flagWhiteTriangle9.cgPathrectWhiteTriangle9.layer.mask = maskLayer9rectWhiteTriangle9.transform = CGAffineTransform(rotationAngle: CGFloat.pi/180*(-60))var rectWhiteTriangle10 = UIView(frame: frame4)rectWhiteTriangle10.backgroundColor = UIColor(red: 1, green: 1, blue: 1, alpha: 1)let flagWhiteTriangle10 = UIBezierPath()var point10 = CGPoint(x: 120/4, y: 40/8)flagWhiteTriangle10.move(to: point10)point10 = CGPoint(x: 30+6.5*tan(Double.pi/12), y: (40-17)/2)flagWhiteTriangle10.addLine(to: point10)point10 = CGPoint(x: 30-6.5*tan(Double.pi/12), y: (40-17)/2)flagWhiteTriangle10.addLine(to: point10)point10 = CGPoint(x: 120/4, y: 40/8)flagWhiteTriangle10.close()let maskLayer10 = CAShapeLayer()maskLayer10.path = flagWhiteTriangle10.cgPathrectWhiteTriangle10.layer.mask = maskLayer10rectWhiteTriangle10.transform = CGAffineTransform(rotationAngle: CGFloat.pi/180*(-90))var rectWhiteTriangle11 = UIView(frame: frame4)rectWhiteTriangle11.backgroundColor = UIColor(red: 1, green: 1, blue: 1, alpha: 1)let flagWhiteTriangle11 = UIBezierPath()var point11 = CGPoint(x: 120/4, y: 40/8)flagWhiteTriangle11.move(to: point11)point11 = CGPoint(x: 30+6.5*tan(Double.pi/12), y: (40-17)/2)flagWhiteTriangle11.addLine(to: point11)point11 = CGPoint(x: 30-6.5*tan(Double.pi/12), y: (40-17)/2)flagWhiteTriangle11.addLine(to: point11)point11 = CGPoint(x: 120/4, y: 40/8)flagWhiteTriangle11.close()let maskLayer11 = CAShapeLayer()maskLayer11.path = flagWhiteTriangle11.cgPathrectWhiteTriangle11.layer.mask = maskLayer11rectWhiteTriangle11.transform = CGAffineTransform(rotationAngle: CGFloat.pi/180*(-120))var rectWhiteTriangle12 = UIView(frame: frame4)rectWhiteTriangle12.backgroundColor = UIColor(red: 1, green: 1, blue: 1, alpha: 1)let flagWhiteTriangle12 = UIBezierPath()var point12 = CGPoint(x: 120/4, y: 40/8)flagWhiteTriangle12.move(to: point8)point12 = CGPoint(x: 30+6.5*tan(Double.pi/12), y: (40-17)/2)flagWhiteTriangle12.addLine(to: point12)point12 = CGPoint(x: 30-6.5*tan(Double.pi/12), y: (40-17)/2)flagWhiteTriangle12.addLine(to: point12)point12 = CGPoint(x: 120/4, y: 40/8)flagWhiteTriangle12.close()let maskLayer12 = CAShapeLayer()maskLayer12.path = flagWhiteTriangle12.cgPathrectWhiteTriangle12.layer.mask = maskLayer12rectWhiteTriangle12.transform = CGAffineTransform(rotationAngle: CGFloat.pi/180*(-150))let view = UIView(frame: CGRect(x: 0, y: 0, width: 120, height: 80))view.addSubview(rectRed)print(rectBlue.frame)view.addSubview(rectBlue)view.addSubview(rectWhite)view.addSubview(rectWhiteTriangle)view.addSubview(rectWhiteTriangle2)view.addSubview(rectWhiteTriangle3)view.addSubview(rectWhiteTriangle4)view.addSubview(rectWhiteTriangle5)view.addSubview(rectWhiteTriangle6)view.addSubview(rectWhiteTriangle7)view.addSubview(rectWhiteTriangle8)view.addSubview(rectWhiteTriangle9)view.addSubview(rectWhiteTriangle10)view.addSubview(rectWhiteTriangle11)view.addSubview(rectWhiteTriangle12)

總覺得其他的三角形可以用Func來簡化~

總之完成了🇹🇼🇹🇼🇹🇼

--

--