Как использовать значение UIColorFromRGB в Swift
В iOS мы используем этот код для установки цветового кода RGB для просмотров
#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);
Как использовать это в swift?
Ответы
Ответ 1
Здесь версия Swift этой функции (для получения представления UIColor значения UInt
):
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)
Ответ 2
Я хотел поставить
cell.backgroundColor = UIColor.colorWithRed(125/255.0, green: 125/255.0, blue: 125/255.0, alpha: 1.0)
но это не сработало.
Итак, я использовал:
Для Swift
cell.backgroundColor = UIColor(red: 0.5, green: 0.5, blue: 0.5, alpha: 1.0)
Итак, это обходной путь, который я нашел.
Ответ 3
Мне очень понравился ответ Нейта Кука, но я хотел кое-что немного более идиоматично. Я считаю, что это действительно полезно для инициализатора удобства через пользовательское расширение.
// 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)
)
}
}
Теперь это можно использовать так:
view.backgroundColor = UIColor(rgb: 0x209624)
Я бы рекомендовал только обезвреживать классы UIKit, как это, в вашем собственном клиентском коде, а не в библиотеках.
Ответ 4
myLabel.backgroundColor = UIColor(red: 50.0/255, green: 150.0/255, blue: 65.0/255, alpha: 1.0)
Ответ 5
Если вы начинаете с строки (не шестнадцатеричной), это функция, которая принимает шестнадцатеричную строку и возвращает UIColor.
(Вы можете ввести шестнадцатеричные строки в любом формате: #ffffff
или ffffff
)
Применение:
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)
)
}
Источник: arshad/gist: de147c42d7b3063ef7bc
Ответ 6
Самый простой способ добавить цвет программно - это использовать ColorLiteral.
Просто добавьте свойство ColorLiteral, как показано в примере, Xcode предложит вам полный список цветов, которые вы можете выбрать. Преимущество этого - меньший код, добавить значения HEX или RGB. Вы также получите недавно использованные цвета из раскадровки.
Пример:
self.view.backgroundColor = ColorLiteral ![введите описание изображения здесь]()
Ответ 7
Я использовал следующее в swift.
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)
Ответ 8
решение для формата argb:
// 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
)
}
}
использование:
var clearColor: UIColor = UIColor.init(argb: 0x00000000)
var redColor: UIColor = UIColor.init(argb: 0xFFFF0000)
Ответ 9
Вы не можете использовать сложные макросы, такие как #define UIColorFromRGB(rgbValue)
в swift. Замена простого макроса в swift - это глобальные константы, такие как
let FADE_ANIMATION_DURATION = 0.35
Тем не менее сложные макросы, которые принимают параметры, не поддерживаются быстрым. вы могли бы использовать функции
Сложные макросы используются в C и Objective-C, но не имеют аналогов в Swift. Сложные макросы - это макросы, которые не определяют константы, в том числе в скобках, функциональные макросы. Вы используете сложные макросы в C и Objective-C, чтобы избежать ограничений проверки типов или избежать повторного набора большого количества кода шаблона. Однако макросы могут затруднить отладку и рефакторинг. В Swift вы можете использовать функции и обобщения для достижения тех же результатов без каких-либо компромиссов. Поэтому сложные макросы, которые находятся в исходных файлах C и Objective-C, не доступны для вашего кода Swift.
Выдержка из Использование swift с cocoa и объективным C
Проверьте ответ @Nate Cooks на версию Swift этой функции, которая будет использоваться здесь
Ответ 10
Вы можете использовать это:
//The color RGB #85CC4B
let newColor = UIColor(red: CGFloat(0x85)/255
,green: CGFloat(0xCC)/255
,blue: CGFloat(0x4B)/255
,alpha: 1.0)
Ответ 11
Это работает для меня быстро. Попробуйте это
bottomBorder.borderColor = UIColor (red: 255.0/255.0, green: 215.0/255.0, blue: 60/255.0, alpha: 1.0).CGColor
Ответ 12
Ответ Nate Cook абсолютно правильный.
Для большей гибкости я сохраняю следующие функции в своем пакете:
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)!);
}
И вот как я их использую:
// 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)
Надеюсь, это поможет.
Все протестировано с помощью Swift 3/Xcode 8.
Ответ 13
Это приятное расширение для UIColor. Вы можете использовать значения enum (hex, string) и прямые строковые значения при создании объектов UIColor.
Расширение, которого мы заслуживаем
https://github.com/ioramashvili/UsefulExtensions/blob/master/Extensions.playground/Pages/UIColor.xcplaygroundpage/Contents.swift
Ответ 14
Я вижу, что его уже ответили, но все же надеюсь, что один лайнер поможет лучше.
import UIKit
let requiredColor = UIColor(red: CGFloat((rgbValue & 0xFF0000) >> 16)/255,
green: CGFloat((rgbValue & 0x00FF00) >> 8)/255,
blue: CGFloat(rgbValue & 0x0000FF)/255, alpha :1)
Обновлено:: изменения, сделанные в соответствии с примером, объясненным автором вопроса, для предоставления шестнадцатеричных значений
Ответ 15
В Swift3, если вы начинаете с цвета, который вы уже выбрали, вы можете получить значение RGB онлайн (http://imagecolorpicker.com) и использовать те значения, которые определены как UIColor. Это решение реализует их в качестве фона:
@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
@Вадим упомянул об этом выше в комментариях, и важно определить CGFloat с одной десятичной точкой
Ответ 16
добавление опции быстрого 3:
cell.layer.borderColor = UIColor (red: 192.0/255.0, green: 192.0/255.0, blue: 197/255.0, alpha: 1.0).cgColor
Ответ 17
Это можно просто сделать, используя эту инициализацию
view.backgroundColor = UIColor(hex: "067AB5")