[Swift] 어떤 UIColor에서 어떤 UIColor로 변화하는 도중에 지나가는 UIColor.

14970 단어 Swift
어떤 UIColor에서 어떤 UIColor로 변할 때 중간에 지나가는 색깔 제작 방법.
나는 아래의 원본 코드로 재현했다.

DEMO


전달이 안 될까 봐 퍼레이드예요.

소스 코드


UIColorExtension.swift
import UIKit

extension UIColor {

    class func colorForOffsetPercentage(percentage: CGFloat, beforeColor: UIColor, afterColor: UIColor) -> UIColor {
        var beforeRGB = beforeColor.RGBForColor()
        var afterRGB = afterColor.RGBForColor()

        var actualRed = (afterRGB.red - beforeRGB.red) * percentage + beforeRGB.red
        var actualBlue = (afterRGB.blue - beforeRGB.blue) * percentage + beforeRGB.blue
        var actualGreen = (afterRGB.green - beforeRGB.green) * percentage + beforeRGB.green
        var actualAlpha = (afterRGB.alpha - beforeRGB.alpha) * percentage + beforeRGB.alpha

        return UIColor(red: actualRed, green: actualGreen, blue: actualBlue, alpha: actualAlpha)

    }

    func RGBForColor() -> (red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat) {
        var red: CGFloat = 0.0
        var green: CGFloat = 0.0
        var blue: CGFloat = 0.0
        var alpha: CGFloat = 0.0
        getRed(&red, green: &green, blue: &blue, alpha: &alpha)
        return (red, green, blue, alpha)
    }
}
percentage0.0 ~ 1.0 사이의 값을 입력하면 UIColor로 돌아갑니다.

사용법


DEMO로 제작된ViewController.swift 소스 코드입니다.
ViewController.swift
import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var textColorLabel: UILabel!
    @IBOutlet weak var redColorLabel: UILabel!
    @IBOutlet weak var greenColorLabel: UILabel!
    @IBOutlet weak var blueColorLabel: UILabel!
    @IBOutlet weak var slider: UISlider!

    private let beforeColor: UIColor = UIColor.blueColor()
    private let afterColor: UIColor = UIColor.greenColor()

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        slider.minimumValue = 0
        slider.maximumValue = 1
        slider.value = 0
        slider.addTarget(self, action: "didChangeValue:", forControlEvents: UIControlEvents.ValueChanged)
        viewTextColorLabel(percentage: 0.0)
        viewRGBColorLabel(percentage: 0.0)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

extension ViewController {

    func didChangeValue(sender: UISlider) {
        let percentage = CGFloat(sender.value)
        viewTextColorLabel(percentage: percentage)
        viewRGBColorLabel(percentage: percentage)
    }

    private func viewTextColorLabel(#percentage: CGFloat) {
        textColorLabel.textColor = UIColor.colorForOffsetPercentage(percentage, beforeColor: beforeColor, afterColor: afterColor)
    }

    private func viewRGBColorLabel(#percentage: CGFloat) {
        let color = UIColor.colorForOffsetPercentage(percentage, beforeColor: beforeColor, afterColor: afterColor)
        let colorRGB = color.RGBForColor()
        redColorLabel.text = "R: \((colorRGB.red * 255.0))"
        greenColorLabel.text = "G: \((colorRGB.green * 255.0))"
        blueColorLabel.text = "B: \((colorRGB.blue * 255.0))"
    }

}

설명


소스 코드 자체가 특별히 어려운 일을 하지 않았기 때문에 이것을 만드는 배경에서도 말씀드리고 싶습니다.
애니메이션을 통해 실제 색에서 어떤 색으로의 변화를 실현할 수 있습니다.UIView의 애니메이션에서 적절하게 바꾸면 색깔이 적당히 바뀐다.
하지만 이번에 제가 하고 싶은 것은 UIScrollView 스크롤량에 따라 색깔을 바꾸는 것이기 때문에 이런 처리가 필요합니다.

끝맺다


잘하니까 그걸 공유했어.

좋은 웹페이지 즐겨찾기