আমি সুইফটে কীভাবে ইউআইকিঅলরফ্র্যামআরজিবি ব্যবহার করতে পারি?


110

অবজেক্টিভ-সি-তে, আমরা এই কোডটি দর্শনের জন্য আরজিবি রঙিন কোড সেট করতে ব্যবহার করি:

#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);

আমি কীভাবে এটি সুইফটে ব্যবহার করতে পারি?


উত্তর:


169

এখানে সেই ফাংশনের একটি সুইফ্ট সংস্করণ রয়েছে (কোনও 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)

1
আপনি যদি এই ফাংশনে একটি সংজ্ঞায়িত রঙের ধ্রুবকটি পাস করেন তবে ধ্রুব টাইপটি: UInt castালতে ভুলবেন না। উদাহরণস্বরূপ স্ট্রাক্ট কালার {স্ট্যাটিক ডার্কব্লিউ: ইউআইএনটি = 0x1f5e75 স্ট্যাটিক যাক নীল: UInt = 0x3f7589 স্ট্যাটিক লাইটব্লু: UInt = 0x7fa3b0}
জাভিয়ের

129

আমি রাখতে চাই

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

কিন্তু এটি কার্যকর হয়নি।

সুতরাং আমি ব্যবহার করেছি:
সুইফ্টের জন্য

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

সুতরাং এটিই আমি খুঁজে পেয়েছি ar


33
যাক রঙ: ইউআইসিওলর = ইউআইসিওলর (লাল: সিজিফ্লোট (0 / 255.0), সবুজ: সিজিফ্লোট (110 / 255.0), নীল: সিজিফ্লোট (255 / 255.0), আলফা: সিজিফ্লোট (1.0))
ভডিয়াম

1
আসলটি কাজ করবে যদি আপনি এটি প্রথম বন্ধনীতে রেখেছিলেন (দ্বিতীয়টির মতো), এবং দশমিক সংখ্যা হিসাবে "/" চিহ্নের সামনে প্রথম সংখ্যা রাখেন যাতে এটি কোনও পূর্ণসংখ্যার সাথে কাটা না যায়।
অ্যান্ডি লেবোটিজ

64

আমি নাট কুকের উত্তরটি সত্যিই পছন্দ করেছি তবে আমি কিছুটা বেশি মূর্খতা চাইছিলাম। আমি বিশ্বাস করি এটি একটি কাস্টম এক্সটেনশনের মাধ্যমে সুবিধাপূর্ণ প্রাথমিককরণের জন্য সত্যিই ভাল ব্যবহারের কেস।

// 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)

আমি কেবল আপনার নিজের ক্লায়েন্ট কোডগুলিতে লাইব্রেরিগুলিতে নয় এমন বানরকে ইউআইকিট ক্লাসগুলি প্যাচিংয়ের প্রস্তাব দিই।


আরজিবি মান 0x209624 কোথায় পাব?
কনস বালাকেনা

@ কনসবুলাকেনা এটি কেবল 0xকোনও হেক্স রঙের পরে অনুসরণ করেছে - color-hex.com
ব্লাউডারমিল্ক :

আমি দেখি. খুব দরকারী! ধন্যবাদ @ ব্লাউডারমিল্ক
কনফারেন্স বুলাকোনা


38

প্রোগ্রামালিমে রঙ যুক্ত করার সহজ উপায় হ'ল কালারলিটারাল ব্যবহার করে ।

উদাহরণ হিসাবে দেখানো হয়েছে এমন বৈশিষ্ট্য হিসাবে কেবল কালারলিটারাল যুক্ত করুন, এক্সকোড আপনাকে চয়ন করতে পারে এমন রঙের পুরো তালিকা সহ আপনাকে অনুরোধ করবে। এটি করার সুবিধাটি হ'ল কম কোড, এইচএক্স মান বা আরজিবি যোগ করুন । আপনি স্টোরিবোর্ড থেকে সম্প্রতি ব্যবহৃত রঙগুলিও পাবেন।

উদাহরণ: স্ব.ভিউ.ব্যাকগ্রাউন্ড কালার = কালারলিটারালএখানে চিত্র বর্ণনা লিখুন


5
এটা চমৎকার !
বৈভব সরান

এই দ্রুত হাত ভাগ করে নেওয়ার জন্য ধন্যবাদ .. নতুন শেখা .. :)
আমির

32

যদি আপনি কোনও স্ট্রিং থেকে শুরু করেন (হেক্স নয়) এটি এমন একটি ফাংশন যা একটি হেক্স স্ট্রিং নেয় এবং একটি ইউআইসিওলর প্রদান করে।
(আপনি দুটি ফর্ম্যাট সহ হেক্স স্ট্রিং প্রবেশ করতে পারেন: #ffffffবা ffffff)

ব্যবহার:

var color1 = hexStringToUIColor("#d3d3d3")

সুইফট 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)
    )
}

সুইফট 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)
    )
}

সুইফট 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)
    )
}



সূত্র: আরশাদ / গিস্ট: de147c42d7b3063ef7bc



6

সুইফট 4-তে ইউআইক্লোরফ্র্যামআরজিবি

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

5

আমি নিম্নলিখিতটি দ্রুত ব্যবহার করেছি।

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)

আমি নিম্নলিখিতগুলিকে দ্রুতগতিতে ব্যবহার করেছি: let isItAnswer = false;
আলেকজান্ডার ভোলকভ

4

আরজিবি বিন্যাসের জন্য সমাধান:

//  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)



2

আপনি #define UIColorFromRGB(rgbValue)দ্রুতগতির মতো জটিল ম্যাক্রো ব্যবহার করতে পারবেন না । সুইফটে সরল ম্যাক্রোর প্রতিস্থাপন হ'ল গ্লোবাল কনস্ট্যান্ট

let FADE_ANIMATION_DURATION = 0.35

এখনও জটিল ম্যাক্রোগুলি যা পরামিতিগুলি স্বীকার করে তা দ্রুত দ্বারা সমর্থিত হয় না। আপনি পরিবর্তে ফাংশন ব্যবহার করতে পারে

কমপ্লেক্স ম্যাক্রোগুলি সি এবং অবজেক্টিভ-সিতে ব্যবহৃত হয় তবে সুইফটে কোনও অংশ নেই। কমপ্লেক্স ম্যাক্রো হ'ল ম্যাক্রো যা প্যারেন্থাইজড, ফাংশন-জাতীয় ম্যাক্রো সহ স্থিরকগুলি সংজ্ঞায়িত করে না। টাইপ-চেকিং সীমাবদ্ধতাগুলি এড়াতে বা বয়লারপ্লিট কোডের বৃহত পরিমাণে পুনরায় টাইপ করা এড়াতে আপনি সি এবং অবজেক্টিভ-সি-তে জটিল ম্যাক্রো ব্যবহার করেন। তবে ম্যাক্রো ডিবাগিং এবং রিফ্যাক্টরিংকে কঠিন করে তুলতে পারে। সুইফটে, আপনি কোনও আপস ছাড়াই একই ফলাফল অর্জন করতে ফাংশন এবং জেনেরিকগুলি ব্যবহার করতে পারেন। অতএব, সি এবং অবজেক্টিভ-সি উত্স ফাইলগুলিতে থাকা জটিল ম্যাক্রোগুলি আপনার সুইফট কোডে উপলভ্য নয়।

কোকো এবং অবজেক্টিভ সি সহ সুইফ্ট ব্যবহার করা থেকে উদ্ধৃত অংশ

এখানে ব্যবহার করার জন্য সেই ফাংশনের সুইফ্ট সংস্করণটির জন্য @ নেট কুকের উত্তর পরীক্ষা করে দেখুন


2

আপনি এটি ব্যবহার করতে পারেন:

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

1

নেট কুকের উত্তর একেবারে সঠিক। কেবলমাত্র বৃহত্তর নমনীয়তার জন্য, আমি নিম্নলিখিত প্যাকেজে আমার প্যাকটিতে রাখি:

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)

আশা করি এটি সাহায্য করবে। সুইফট 3 / এক্সকোড 8 দিয়ে সবকিছু পরীক্ষা করা হয়।


0

এটি ইউআইকিওলারের জন্য একটি দুর্দান্ত এক্সটেনশন। আপনি ইউআইকোলার অবজেক্ট তৈরি করার সময় এনাম মান (হেক্স, স্ট্রিং) এবং ডাইরেক্ট স্ট্রিং মানগুলি ব্যবহার করতে পারেন।

আমরা প্রসারণের প্রাপ্য https://github.com/ioramashvili/UsefulExtensions/blob/master/Extensions.playground/Pages/UIColor.xcplaygroundpage/Contents.swift


যতক্ষণ এই তাত্ত্বিক প্রশ্নের উত্তর হতে পারে, এটা বাঞ্ছনীয় হবে উত্তর অপরিহার্য অংশের এখানে অন্তর্ভুক্ত করা, এবং রেফারেন্স এর জন্য লিঙ্ক প্রদান।
টবি ন্যারি

0

আমি এর ইতিমধ্যে উত্তর দেওয়া দেখতে পাচ্ছি তবে এখনও আশা করি একটি লাইনার আরও ভালভাবে সহায়তা করবে।

import UIKit

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

আপডেট হয়েছে: হেক্সের মান প্রদানের জন্য প্রশ্নের লেখক দ্বারা বর্ণিত উদাহরণ হিসাবে করা পরিবর্তনগুলি


0

সুইফট 3-এ, আপনি যদি ইতিমধ্যে বেছে নেওয়া কোনও রঙ দিয়ে শুরু করেন, আপনি অনলাইনে আরজিবি মান পেতে পারেন ( http://imagecolorpicker.com ) এবং সেই মানগুলি ইউআইকিওলর হিসাবে সংজ্ঞায়িত করতে পারেন। এই সমাধানটি পটভূমি হিসাবে তাদের প্রয়োগ করে:

    @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

@ ভাদিম মন্তব্যগুলিতে উপরে এটি উল্লেখ করেছেন এবং সিজিফ্লোটকে একটি দশমিক বিন্দু দিয়ে সংজ্ঞা দেওয়া গুরুত্বপূর্ণ


0
import Cocoa
class ViewController: NSViewController{
     override func viewDidLoad() {
            super.viewDidLoad()
    self.view.wantsLayer = true
    self.view.layer?.backgroundColor = NSColor(hexString: "#4d9b48").cgColor

}
extension NSColor {

            convenience init(hexString: String, alpha: CGFloat = 1.0) {
                  let hexString: String = hexString.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
                  let scanner = Scanner(string: hexString)
                  if (hexString.hasPrefix("#")) {
                      scanner.scanLocation = 1
                  }
                  var color: UInt32 = 0
                  scanner.scanHexInt32(&color)
                  let mask = 0x000000FF
                  let r = Int(color >> 16) & mask
                  let g = Int(color >> 8) & mask
                  let b = Int(color) & mask
                  let red   = CGFloat(r) / 255.0
                  let green = CGFloat(g) / 255.0
                  let blue  = CGFloat(b) / 255.0
                  self.init(red:red, green:green, blue:blue, alpha:alpha)
              }
              func toHexString() -> String {
                  var r:CGFloat = 0
                  var g:CGFloat = 0
                  var b:CGFloat = 0
                  var a:CGFloat = 0
                  getRed(&r, green: &g, blue: &b, alpha: &a)
                  let rgb:Int = (Int)(r*255)<<16 | (Int)(g*255)<<8 | (Int)(b*255)<<0
                  return String(format:"#%06x", rgb)

            }
        }

-3

এটি কেবল এই আরম্ভকরণটি ব্যবহার করে করা যেতে পারে

view.backgroundColor = UIColor(hex: "067AB5")
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.