iT邦幫忙

2024 iThome 鐵人賽

DAY 12
0
Mobile Development

少年K的Swift奇幻漂流記系列 第 12

Day12 Swift ColorBoard APP 實作 Part2

  • 分享至 

  • xImage
  •  

昨天教了怎麼部署元件,以及命名的 Coding Style,今天來教元件功能

主要的 RGB 顯示區域

調色盤最主要的就是顯示 RGB 三原色混合之後的顏色,所以我們先完成這個主要的部分。
由於昨天已經宣告過需要的元件和命名了,接下來就需要給元件在動作的時候會執行什麼

// vRGB 顏色控制
@IBAction func SliderSum(_ sender: Any) {
    vRGB.backgroundColor = UIColor(
        
        //除以255是因為顏色範圍是0~255,但顏色要正確顯示到View,要是0~1
        red: CGFloat((sldRedValue.value)/255)
        green: CGFloat((sldGreenValue.value)/255)
        blue: CGFloat((sldBlueValue.value)/255)
        alpha: 1
    )
}

Slider

@IBAction func SliderToText(_ sender: UISlider) {
        
    // 紅綠藍三個顏色數值的顯示,顯示在 TextField
    txfRedText.text = "\(Int(sldRedValue.value))"
    txfGreenText.text = "\(Int(sldGreenValue.value))"
    txfBlueText.text = "\(Int(sldBlueValue.value))"

    // 呼叫 View,將 Slider 的值傳入 vRGB 讓他顯示顏色
    SliderSum(sender)
}

TextField

// 會有三個部分一樣邏輯的 Code 來分別控制三種顏色
@IBAction func TextToSlider(_ sender: UITextField) {

    // 紅色
    if let redStringValue = txfRedText.text {

        // 限制輸入的值只能用數字
        if let redIntValue = Int(redStringValue) {

            // 限制最高255,超過255會自動變成255,最低0
            let redValue = max(0, min(255,redIntValue))
            sldRedValue.setValue(Float(redValue), animated: true)
            txfRedText.text = "\(redValue)"

            // 如果不是數字的話會自動歸0
        } else {
            sldRedValue.setValue(0, animated: true)
            txfRedText.text = "0"
        }

        // 沒有輸入值的話也是0
    } else {
        sldRedValue.setValue(0, animated: true)
    }

    // 綠色
    if let greenStringValue = txfGreenText.text {

        // 限制輸入的值只能用數字
        if let greenIntValue = Int(greenStringValue) {

            // 限制最高255,超過255會自動變成255,最低0
            let greenValue = max(0, min(255,greenIntValue))
            sldGreenValue.setValue(Float(greenValue), animated: true)
            txfGreenText.text = "\(greenValue)"

            // 如果不是數字的話會自動歸0
        } else {
            sldGreenValue.setValue(0, animated: true)
            txfGreenText.text = "0"
        }

        // 沒有輸入值的話也是0
    } else {
        sldGreenValue.setValue(0, animated: true)
    }

    // 藍色
    if let blueStringValue = txfBlueText.text {

        // 限制輸入的值只能用數字
        if let blueIntValue = Int(blueStringValue) {
            let blueValue = max(0, min(255,blueIntValue))
            sldBlueValue.setValue(Float(blueValue), animated: true)
            txfBlueText.text = "\(blueValue)"

            // 如果不是數字的話會自動歸0
        } else {
            sldBlueValue.setValue(0, animated: true)
            txfBlueText.text = "0"
        }

        // 沒有輸入值的話也是0
    } else {
        sldBlueValue.setValue(0, animated: true)
    }

    // 以上程式執行完之後,呼叫 SliderSum,令 vRGB 做改變
    SliderSum(sender)
}

額外增加用戶體驗的 function

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        
    // 令用戶按下 Return(Enter) 鍵時會立即輸入,並隱藏鍵盤
    textField.resignFirstResponder()

    // 在 TextField 輸入值之後 同步我的 Slider
    TextToSlider(textField)
    return true
}

現在調色盤就能動起來囉~

補充

有看到我的執行畫面,vRGB 是有圓角的,該怎麼做呢 ?
https://ithelp.ithome.com.tw/upload/images/20240921/20168203PieQ50LKHG.png
點擊+之後,在 Key Path 欄位打上 layer.cornerRadius 並且將 Type 改為 Number ,最後 Value 就打適合的值,值越小越不圓,值越大越圓


上一篇
Day11 Swift ColorBoard APP 實作 Part1
下一篇
Day13 Swift MessageBoard APP 實作 Part1
系列文
少年K的Swift奇幻漂流記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言