#21 ⭐️ 調色大師 (加上亂數和漸層)(feat. 明日方舟Amiya)
以前玩遊戲總是會花很多時間捏黏土人,眼睛頭髮身材高矮胖瘦都可以調成自己喜歡的樣子,不過這邊我只會改顏色。゚ヽ(゚´Д`)ノ゚。
在隨機變色上用.random來變換隨機數值出來(slider的value是maximum 1,所以範圍就設0…1),在把他吃進backgroundColor就可以不透過slider而隨機生成顏色
//用.random來設定各個slider的變數redSlider.value = Float.random(in: 0...1)greenSlider.value = Float.random(in: 0...1)blueSlider.value = Float.random(in: 0...1)alphaSlider.value = Float.random(in: 0...1)//hairView的背景色跟著slider走hairView.backgroundColor = UIColor(red: CGFloat(redSlider.value), green: CGFloat(greenSlider.value), blue: CGFloat(blueSlider.value), alpha: CGFloat(alphaSlider.value))
這邊最麻煩的莫過於漸層,首先要將圖片去背化,光這邊我就搞亂了,說是要去背實際上是把欲去背的範圍保留…所以下圖左邊你去掉頭髮跟眼睛之後你就不能拿它來去背了(你沒聽錯,他很繞,要做兩次動作,去背“剩餘”的部分被拿來當遮罩)
建立新的view(不是ImageView,很重要,連後面的漸層也是),這裡要讓View跟ImageView大小一樣以防圖面是偏掉的,最後才適用.mask將ImageView裡面眼睛跟頭髮變成遮罩
在漸層方面一樣用segment區分眼睛跟頭髮,除了最主要的colors以外,這邊還多玩了startPoint/endPoint/locations,locations會表現出顏色漸層的多或寡,數字越小代表後面那個顏色會站的版面越多(如下如果是0的話就代表0~1後面的顏色都會是藍色)
gradientLayer.startPoint = CGPoint(x: 0.0, y: 0.0)gradientLayer.endPoint = CGPoint(x: 1.0, y: 1.0)gradientLayer.locations = [0.0, NSNumber(value: gradientSlider.value)]
後記
最後還有一個問題沒有解決,不確定為什麼frame跟bounds都設定了但在做漸層的時候會導致下圖的結果,實際漸層的view大小也跟其他大小一樣…還有漸層沒辦法眼睛跟頭髮切割變化(從頭髮切換成眼睛,頭髮的設定會回到red/green/blue/alpha slider的參數)
Reference
Github