it-swarm.com.de

Wie kann ich UIColorFromRGB in Swift verwenden?

In Objective-C verwenden wir diesen Code, um RGB-Farbcodes für Ansichten festzulegen:

#define UIColorFromRGB(rgbValue)        
[UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]

view.backgroundColor=UIColorFromRGB(0x209624);

Wie kann ich das in Swift verwenden?

98
NANNAV

Hier ist eine schnelle Version dieser Funktion (um eine UIColor-Darstellung eines UInt-Werts zu erhalten):

func UIColorFromRGB(rgbValue: UInt) -> UIColor {
    return UIColor(
        red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,
        green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,
        blue: CGFloat(rgbValue & 0x0000FF) / 255.0,
        alpha: CGFloat(1.0)
    )
}

view.backgroundColor = UIColorFromRGB(0x209624)
160
Nate Cook

Ich wollte setzen 

cell.backgroundColor = UIColor.colorWithRed(125/255.0, green: 125/255.0, blue: 125/255.0, alpha: 1.0)  

aber das hat nicht funktioniert.

Also habe ich benutzt:
Für Swift

cell.backgroundColor = UIColor(red: 0.5, green: 0.5, blue: 0.5, alpha: 1.0)  

Das ist also die Problemumgehung, die ich gefunden habe.

115
user3153627

Die Antwort von Nate Cook gefiel mir sehr, aber ich wollte etwas mehr Idiomatik. Ich glaube, dies ist ein wirklich guter Anwendungsfall für einen praktischen Initialisierer über eine benutzerdefinierte Erweiterung.

// UIColorExtensions.Swift
import Foundation
import UIKit

extension UIColor {
    convenience init(rgb: UInt) {
        self.init(
            red: CGFloat((rgb & 0xFF0000) >> 16) / 255.0,
            green: CGFloat((rgb & 0x00FF00) >> 8) / 255.0,
            blue: CGFloat(rgb & 0x0000FF) / 255.0,
            alpha: CGFloat(1.0)
        )
    }
}

Dies kann jetzt so verwendet werden:

view.backgroundColor = UIColor(rgb: 0x209624)

Ich würde nur Affen-Patches für solche UIKit-Klassen in Ihrem eigenen Client-Code empfehlen, nicht in Bibliotheken.

61
bloudermilk
myLabel.backgroundColor = UIColor(red: 50.0/255, green: 150.0/255, blue: 65.0/255, alpha: 1.0)
42
Ankit Goyal

Die einfachste Möglichkeit, Farbe programmgesteuert hinzuzufügen, ist die Verwendung von ColorLiteral.

Fügen Sie einfach die Eigenschaft ColorLiteral hinzu, wie in dem Beispiel gezeigt. Xcode zeigt eine ganze Liste von Farben an, die Sie auswählen können. Der Vorteil dabei ist weniger Code, add HEX-Werte oder RGB. Sie erhalten auch die zuletzt verwendeten Farben aus dem Storyboard.

Beispiel: Self.view.backgroundColor = ColorLiteral  enter image description here

30
puneeth

Wenn Sie von einem String (nicht Hex) ausgehen, ist dies eine Funktion, die einen Hex-String verwendet und eine UIColor zurückgibt.
(Sie können hexadezimale Zeichenfolgen mit den folgenden Formaten eingeben: #ffffff oder ffffff)

Verwendungszweck:

var color1 = hexStringToUIColor("#d3d3d3")

Swift 4:

func hexStringToUIColor (hex:String) -> UIColor {
    var cString:String = hex.trimmingCharacters(in: .whitespacesAndNewlines).uppercased()

    if (cString.hasPrefix("#")) {
        cString.remove(at: cString.startIndex)
    }

    if ((cString.count) != 6) {
        return UIColor.gray
    }

    var rgbValue:UInt32 = 0
    Scanner(string: cString).scanHexInt32(&rgbValue)

    return UIColor(
        red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,
        green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,
        blue: CGFloat(rgbValue & 0x0000FF) / 255.0,
        alpha: CGFloat(1.0)
    )
}

Swift 3:

func hexStringToUIColor (hex:String) -> UIColor {
    var cString:String = hex.trimmingCharacters(in: .whitespacesAndNewlines).uppercased()

    if (cString.hasPrefix("#")) {
        cString.remove(at: cString.startIndex)
    }

    if ((cString.characters.count) != 6) {
        return UIColor.gray
    }

    var rgbValue:UInt32 = 0
    Scanner(string: cString).scanHexInt32(&rgbValue)

    return UIColor(
        red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,
        green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,
        blue: CGFloat(rgbValue & 0x0000FF) / 255.0,
        alpha: CGFloat(1.0)
    )
}

Swift 2:

func hexStringToUIColor (hex:String) -> UIColor {
    var cString:String = hex.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet() as NSCharacterSet).uppercaseString

    if (cString.hasPrefix("#")) {
      cString = cString.substringFromIndex(cString.startIndex.advancedBy(1))
    }

    if ((cString.characters.count) != 6) {
      return UIColor.grayColor()
    }

    var rgbValue:UInt32 = 0
    NSScanner(string: cString).scanHexInt(&rgbValue)

    return UIColor(
        red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,
        green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,
        blue: CGFloat(rgbValue & 0x0000FF) / 255.0,
        alpha: CGFloat(1.0)
    )
}



Quelle: arshad/Gist: de147c42d7b3063ef7bc

26
Ethan Strider

Verwenden Sie für Xcode 9UIColor mit RGB-Werten.

shareBtn.backgroundColor = UIColor( red: CGFloat(92/255.0), green: CGFloat(203/255.0), blue: CGFloat(207/255.0), alpha: CGFloat(1.0) )

Vorschau:

 button preview with custom RGB color

Zusätzliche Apple-Dokumentation zu UIColor .

10
Cons Bulaquena

Ich habe in Swift folgendes verwendet.

let appRedColor = UIColor(red: 200.0/255.0, green: 16.0/255.0, blue: 46.0/255.0, alpha: 1.0)
let appSilverColor = UIColor(red: 236.0/255.0, green: 236.0/255.0, blue: 236.0/255.0, alpha: 1.0)
let appWhiteColor = UIColor(red: 255.0/255.0, green: 255.0/255.0, blue: 255.0/255.0, alpha: 1.0)
let appNavyColor = UIColor(red: 19.0/255.0, green: 41.0/255.0, blue: 75.0/255.0, alpha: 1.0)
5
Imtee

UIColorFromRGB in Swift 4

button.layer.backgroundColor = UIColor(red: 112.0/255, green: 86.0/255, blue: 164.0/255, alpha: 1.0).cgColor
3

hinzufügen einer Swift 3-Option:

cell.layer.borderColor = UIColor (red: 192.0/255.0, green: 192.0/255.0, blue: 197/255.0, alpha: 1.0).cgColor
3
David Sanford

Das ist für mich in Swift gearbeitet. Versuche dies

bottomBorder.borderColor = UIColor (red: 255.0/255.0, green: 215.0/255.0, blue: 60/255.0, alpha: 1.0).CGColor

lösung für das argb-Format:

//  UIColorExtensions.Swift
import UIKit
extension UIColor {

    convenience init(argb: UInt) {
        self.init(
            red: CGFloat((argb & 0xFF0000) >> 16) / 255.0,
            green: CGFloat((argb & 0x00FF00) >> 8) / 255.0,
            blue: CGFloat(argb & 0x0000FF) / 255.0,
            alpha: CGFloat((argb & 0xFF000000) >> 24) / 255.0
        )
    }
}

verwendungszweck:

var clearColor: UIColor = UIColor.init(argb: 0x00000000)
var redColor: UIColor = UIColor.init(argb: 0xFFFF0000)
3
Vyacheslav

Sie können dies verwenden:

//The color RGB #85CC4B
let newColor = UIColor(red: CGFloat(0x85)/255
                      ,green: CGFloat(0xCC)/255
                      ,blue: CGFloat(0x4B)/255
                      ,alpha: 1.0)
2
atiruz

Sie können keine komplexen Makros wie #define UIColorFromRGB(rgbValue) in Swift verwenden. Das Ersetzen von einfachen Makros in Swift erfolgt durch globale Konstanten wie 

let FADE_ANIMATION_DURATION = 0.35

Die komplexen Makros, die Parameter akzeptieren, werden von Swift jedoch nicht unterstützt. Sie können stattdessen Funktionen verwenden 

Komplexe Makros werden in C und Objective-C verwendet, haben jedoch in Swift keine Entsprechung. Komplexe Makros sind Makros, die keine Konstanten definieren, einschließlich funktioneller Makros in Klammern. Sie verwenden komplexe Makros in C und Objective-C, um Einschränkungen bei der Typprüfung zu vermeiden oder um zu vermeiden, dass große Mengen an Speichercode erneut eingegeben werden. Makros können jedoch das Debugging und Refactoring schwierig machen. In Swift können Sie Funktionen und Generika verwenden, um dieselben Ergebnisse ohne Kompromisse zu erzielen. Daher werden die komplexen Makros, die sich in C- und Objective-C-Quelldateien befinden, für Ihren Swift-Code nicht verfügbar gemacht.

Auszug aus Verwendung von Swift mit Kakao und Objective C

Überprüfen Sie die Antwort von @Nate Cooks auf die Swift-Version dieser Funktion, die hier verwendet werden soll 

2
Anil Varghese

Die Antwort von Nate Cook ist absolut richtig .. Um die Flexibilität zu erhöhen, behalte ich folgende Funktionen in meinem Rucksack

func getUIColorFromRGBThreeIntegers(red: Int, green: Int, blue: Int) -> UIColor {
    return UIColor(red: CGFloat(Float(red) / 255.0),
        green: CGFloat(Float(green) / 255.0),
        blue: CGFloat(Float(blue) / 255.0),
        alpha: CGFloat(1.0))
}

func getUIColorFromRGBHexValue(value: Int) -> UIColor {
    return getUIColorFromRGBThreeIntegers(red: (value & 0xFF0000) >> 16,
        green: (value & 0x00FF00) >> 8,
        blue: value & 0x0000FF)
}

func getUIColorFromRGBString(value: String) -> UIColor {
    let str = value.lowercased().replacingOccurrences(of: "#", with: "").
        replacingOccurrences(of: "0x", with: "");
        return getUIColorFromRGBHexValue(value: Int(str, radix: 16)!);
}

Und so benutze ich sie:

// All three of them are identical:
let myColor1 = getUIColorFromRGBHexValue(value: 0xd5a637)
let myColor2 = getUIColorFromRGBString(value: "#D5A637")
let myColor3 = getUIColorFromRGBThreeIntegers(red: 213, green: 166, blue: 55)

Ich hoffe, das hilft. Alles wird mit Swift 3/Xcode 8 getestet.

1
Nick Ivanov

Dies ist eine schöne Erweiterung für UIColor. Sie können beim Erstellen von UIColor-Objekten Aufzählungswerte (Hex, String) und Direkt-String-Werte verwenden.

Die Erweiterung die wir verdienen https://github.com/ioramashvili/UsefulExtensions/blob/master/Extensions.playground/Pages/UIColor.xcplaygroundpage/Contents.Swift

0
shota

Ich kann sehen, dass es bereits beantwortet wurde, aber ich hoffe immer noch, dass ein Liner auf bessere Weise helfen wird.

import UIKit

let requiredColor = UIColor(red: CGFloat((rgbValue & 0xFF0000) >> 16)/255, 
                            green: CGFloat((rgbValue & 0x00FF00) >> 8)/255, 
                            blue: CGFloat(rgbValue & 0x0000FF)/255, alpha :1)

Aktualisiert: : Änderungen gemäß Beispiel, das vom Autor der Frage erläutert wurde, um Hex-Werte anzugeben 

0

Wenn Sie in Swift3 mit einer Farbe beginnen, die Sie bereits ausgewählt haben, können Sie den RGB-Wert online abrufen ( http://imagecolorpicker.com ) und die als UIColor definierten Werte verwenden. Diese Lösung implementiert sie als Hintergrund:

    @IBAction func blueBackground(_ sender: Any) {
        let blueColor = UIColor(red: CGFloat(160/255), green: CGFloat(183.0/255), blue: CGFloat(227.0/255), alpha: 1)
        view.backgroundColor = blueColor

@Vadym hat dies oben in den Kommentaren erwähnt und es ist wichtig, den CGFloat mit einem einzelnen Dezimalpunkt zu definieren

0
RandallShanePhD