#10 幫《戴黑帽的男人》換蘋果顏色
熟練目標:outlet、action、UISlider、UIColor
René Magritte的名畫《The Son of Man》一直在吃綠蘋果,我覺得看起來很酸,就來幫他催熟蘋果好了。
利用Slider變換顏色
從網路上找到名畫圖片,將蘋果果實去背,再搭配螺旋星系當作變換顏色的背景圖。
新建一個Xcode的Project,加入兩個Image View。螺旋星系設定為背景階層;黑帽男蓋在上面,拉成滿版畫面。
接著要改銀河的背景顏色。加入四個Slider,並調整Track和Tint的顏色。Value設定值為1
加了Slider,但還無法變色。開始寫程式!
把螺旋星系的背景圖片拉一個outlet,名稱設定bgColorChange,其他四個Slider也各拉一個outlet。
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var bgColorChange: UIImageView!
@IBOutlet weak var redSliderChange: UISlider!
@IBOutlet weak var greenSliderChange: UISlider!
@IBOutlet weak var blueSliderChange: UISlider!
@IBOutlet weak var alphaSliderChange: UISlider!
override func viewDidLoad() {
super.viewDidLoad()
}
outlet設定完,在程式下方拉一個Slider的Action指令。名稱設定changeColor,記得四個Slider都要拉在同一個Action裡面。
@IBAction func changeColor(_ sender: Any) {
bgColorChange.backgroundColor=UIColor(red: CGFloat(redSliderChange.value), green: CGFloat(greenSliderChange.value), blue: CGFloat(blueSliderChange.value), alpha: CGFloat(alphaSliderChange.value))
}
亂數變換顏色
新增一個UIButton,將按鈕變成圓形。並設定按下Button就能亂數換顏色。
@IBOutlet weak var button: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
self.button.layer.cornerRadius=self.button.frame.size.height/2
圓形按鈕製作教學可參考這篇:
@IBAction func randomColor(_ sender: Any) {
redSliderChange.value = .random(in: 0...1)
greenSliderChange.value = .random(in: 0...1)
blueSliderChange.value = .random(in: 0...1)
alphaSliderChange.value = .random(in: 0...1)
bgColorChange.backgroundColor=UIColor(red: CGFloat(redSliderChange.value), green: CGFloat(greenSliderChange.value), blue: CGFloat(blueSliderChange.value), alpha: CGFloat(alphaSliderChange.value))
}
Slider滑動時加上動畫效果
原先.value的參數變成.setValue,並將animated打開為true。
@IBAction func randomColor(_ sender: Any) {
redSliderChange.setValue(.random(in: 0...1), animated: true)
greenSliderChange.setValue(.random(in: 0...1), animated: true)
blueSliderChange.setValue(.random(in: 0...1), animated: true)
alphaSliderChange.setValue(.random(in: 0...1), animated: true)
bgColorChange.backgroundColor=UIColor(red: CGFloat(redSliderChange.value), green: CGFloat(greenSliderChange.value), blue: CGFloat(blueSliderChange.value), alpha: CGFloat(alphaSliderChange.value))
}
開始拉outlet和action後,慢慢感覺到Xcode更多客製化的操作,比單純用storyboard製作來得更具彈性,期待學習animated的各種變化。