ইউআইসিওলোর থেকে হালকা হালকা এবং গাark় রঙ পান


144

আমি যে কোনও ইউআইসিক্লোরকে গ্রেডিয়েন্টে পরিণত করতে সক্ষম হচ্ছিলাম। আমি যেভাবে এটি করতে চাইছি তা হল গ্রাডিয়েন্ট আঁকতে কোর গ্রাফিক্স ব্যবহার করে। আমি যা করার চেষ্টা করছি তা হল একটি রঙ পেতে, বলতে দিন:

[UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:1.0];

এবং একটি ইউআইসিওলর পান যা কয়েকটি শেড গা dark় এবং কয়েকটি শেড হালকা। কেউ কি জানেন, এটা কিভাবে করে? ধন্যবাদ.


1
"গ্রেডিয়েন্ট" বোঝায় যে আপনার চিত্রের একটি অংশ রঙের একটি ছায়া হবে এবং অন্য অংশটি গাer় বা হালকা শেড হবে। আপনি যা করতে চান তা নির্ধারণ করার এটি কি অন্য উপায়?
মাইকেল ডাউটারম্যান

2
এই লাইব্রেরিতে একবার দেখুন github.com/yannickl/
ডায়নামিক

সুইফট রঙ সম্পৃক্তি এবং লঘিমা ব্যবহার stackoverflow.com/a/30012117/2303865
লিও Dabus

উত্তর:


279
- (UIColor *)lighterColorForColor:(UIColor *)c
{
    CGFloat r, g, b, a;
    if ([c getRed:&r green:&g blue:&b alpha:&a])
        return [UIColor colorWithRed:MIN(r + 0.2, 1.0)
                               green:MIN(g + 0.2, 1.0)
                                blue:MIN(b + 0.2, 1.0)
                               alpha:a];
    return nil;
}

- (UIColor *)darkerColorForColor:(UIColor *)c
{
    CGFloat r, g, b, a;
    if ([c getRed:&r green:&g blue:&b alpha:&a])
        return [UIColor colorWithRed:MAX(r - 0.2, 0.0)
                               green:MAX(g - 0.2, 0.0)
                                blue:MAX(b - 0.2, 0.0)
                               alpha:a];
    return nil;
}

এটি এর মতো ব্যবহার করুন:

UIColor *baseColor = // however you obtain your color
UIColor *lighterColor = [self lighterColorForColor:baseColor];
UIColor *darkerColor = [self darkerColorForColor:baseColor];

সম্পাদনা : @ আঁচু চিমালা উল্লেখ করেছেন যে, সর্বাধিক নমনীয়তার জন্য এই পদ্ধতিগুলি ইউআইসিওলর বিভাগ হিসাবে প্রয়োগ করা উচিত। এছাড়াও, @ রিলির ধারণা থেকে, ধ্রুবক মানগুলি যোগ করতে বা বিয়োগের পরিবর্তে রঙটি দীর্ঘতরভাবে গা dark় বা হালকা করা আরও ভাল ধারণা হতে পারে। @ জার্টার্টন যেমন উল্লেখ করেছেন, আরজিবি উপাদানগুলি পরিচালনা করার প্রয়োজন নেই; উজ্জ্বলতার সম্পত্তিটি নিজেরাই সংশোধন করা ভাল। সর্বেসর্বা:

@implementation UIColor (LightAndDark)

- (UIColor *)lighterColor
{
    CGFloat h, s, b, a;
    if ([self getHue:&h saturation:&s brightness:&b alpha:&a])
        return [UIColor colorWithHue:h
                          saturation:s
                          brightness:MIN(b * 1.3, 1.0)
                               alpha:a];
    return nil;
}

- (UIColor *)darkerColor
{
    CGFloat h, s, b, a;
    if ([self getHue:&h saturation:&s brightness:&b alpha:&a])
        return [UIColor colorWithHue:h
                          saturation:s
                          brightness:b * 0.75
                               alpha:a];
    return nil;
}
@end

2
আপনি যখন হিউ, স্যাচুরেশন, উজ্জ্বলতার সাথে একই কাজ করতে পারবেন তখন আরজিবি কেন ব্যবহার করবেন, তারপরে কেবল উজ্জ্বলতার পরিবর্তিত রঙটি পুনর্নির্মাণ করুন?
jrturton

2
আমি নিজে এইচএসবি সংস্করণ দিয়ে চেষ্টা করছি এবং এটি প্রত্যাশার মতো কার্যকর হয়নি। getHue:saturation:brightnessইউআইকিটের স্বাক্ষর সত্ত্বেও , মনে হয় এটি এইচএসবির পরিবর্তে এইচএসভি দিয়ে কাজ করে। এই প্রসঙ্গে উজ্জ্বলতা (সুতরাং প্রকৃতপক্ষে মান) পরিবর্তন করা কার্যকর হবে না। উদাহরণস্বরূপ খাঁটি রেড (আরজিবি (255,0,0)) এর 1 টির উজ্জ্বলতা / মান থাকবে, এইভাবে উজ্জ্বলতার মাধ্যমে আলোককে অসম্ভব করে তোলে। পরিবর্তে আরজিবি মানগুলিতে পরিবর্তন নিয়ে কাজ শেষ করেছি।
rchampauyer

2
আমি মনে করি যে আপনার উত্তরে বিভ্রান্তিকর কিছু আছে: আপনি দুটি পদ্ধতির (একটিকে আরজিবি সহ, এবং অন্যটি বিভাগের সংস্করণের জন্য এইচএসবি সহ) গ্রহণ করেন, যার ফলাফল একই রকম নয় ... এবং এটি একটি প্রশ্ন হতে পারে অর্থ: লাইটনিং হ'ল সত্যই আমার জন্য রঙকে সাদা (কালো করে গা dark় করা) করা যায়, যখন উজ্জ্বলতা / মান পরিবর্তন করে এটি আরও শক্তিশালী করে তোলে (শ্রদ্ধা হালকা)।
rchampauyer

4
এই পদ্ধতিগুলি যদি ধূসর ছায়ায় ব্যবহৃত হয় তবে ব্যর্থ হবে। getHue:saturation:brightness:alphaমিথ্যা ফিরিয়ে দেবে।
ম্যাথিউ রিগলার

2
আমি বিস্মিত হলাম কেন প্রস্তাবিত উভয় সমাধানই ভুল হিসাবে এটি গ্রহণযোগ্য উত্তর । এরা উভয়ই তাত্ত্বিক মান পরিবর্তন করে যা মানুষের 'হালকা' বা 'গা'়' রঙ হিসাবে দেখায় তার সাথে সামান্যই সম্পর্কযুক্ত। আমার অর্থ কী তা বোঝার জন্য আমি এই দুর্দান্ত পোস্টটি (শর্টলিঙ্ক: goo.gl/qqgk9V) পড়ার পরামর্শ দিই। এটি ব্যাখ্যা করে যে ল্যাব রঙের জায়গার মান হ'ল রঙ হালকা / গাer় করার সময় আপনার যত্ন নেওয়া উচিত। দেখুন আমার উত্তর উপর কিভাবে আপনি এটা ব্যবহার করতে পারেন এবং এই সমস্যা সঠিক ভাবে সমাধানের জন্য। luminance
জেহুত

59

টি এল; ডিআর:

সুইফট:

extension UIColor {

    var lighterColor: UIColor {
        return lighterColor(removeSaturation: 0.5, resultAlpha: -1)
    }

    func lighterColor(removeSaturation val: CGFloat, resultAlpha alpha: CGFloat) -> UIColor {
        var h: CGFloat = 0, s: CGFloat = 0
        var b: CGFloat = 0, a: CGFloat = 0

        guard getHue(&h, saturation: &s, brightness: &b, alpha: &a)
            else {return self}

        return UIColor(hue: h,
                       saturation: max(s - val, 0.0),
                       brightness: b,
                       alpha: alpha == -1 ? a : alpha)
    }
}

ব্যবহার:

let lightColor = somethingDark.lighterColor

উদ্দেশ্য গ:

- (UIColor *)lighterColorRemoveSaturation:(CGFloat)removeS
                              resultAlpha:(CGFloat)alpha {
    CGFloat h,s,b,a;
    if ([self getHue:&h saturation:&s brightness:&b alpha:&a]) {
        return [UIColor colorWithHue:h
                          saturation:MAX(s - removeS, 0.0)
                          brightness:b
                               alpha:alpha == -1? a:alpha];
    }
    return nil;
}

- (UIColor *)lighterColor {
    return [self lighterColorRemoveSaturation:0.5
                                  resultAlpha:-1];
}

@ আরচ্যাম্পোরলিয়ার @ ইউজার ৫২৯75৫৮ (স্বীকৃত উত্তর) - এ এইচএসবি (বা এইচএসভি) এবং আরজিবি সমাধানগুলি সম্পূর্ণরূপে পৃথক ফলাফল দেয় তার মন্তব্যে ঠিক ছিল। আরজিবি স্রেফ জুড়ে (বা রঙটিকে আরও ঘনিষ্ঠ করে তোলে) সাদা করে তোলে এবং এইচএসবি দ্রবণটি ব্রিগনেস স্কলে প্রান্তটির আরও কাছাকাছি এনে দেয় - যা মূলত কালো দিয়ে শুরু হয় এবং খাঁটি বর্ণের সাথে শেষ হয় ...

মূলত উজ্জ্বলতা (মান) রঙটি কম বা কালোকে আরও কাছাকাছি করে তোলে, যেখানে স্যাচুরেশন এটিকে সাদা বা কম বেশি করে তোলে ...

যেমনটি এখানে দেখা গেছে:

এইচএসভি রঙের গ্রাফ

সুতরাং কোনও রঙকে আসলে আরও উজ্জ্বল করার সমাধান (অর্থাত্ শ্বেতের কাছাকাছি ...) এটির স্যাচুরেশন মানটিকে আরও ছোট করে তুলবে , ফলে এই সমাধানটি পাওয়া যাবে:

- (UIColor *)lighterColor {
    CGFloat h,s,b,a;
    if ([self getHue:&h saturation:&s brightness:&b alpha:&a]) {
        return [UIColor colorWithHue:h
                          saturation:MAX(s - 0.3, 0.0)
                          brightness:b /*MIN(b * 1.3, 1.0)*/
                               alpha:a];
    }
    return nil;
}

রঙ হালকা করার বিষয়ে: স্যাচুরেশন হ্রাস করে এবং উজ্জ্বলতা / মান বাড়িয়ে আমি সেরা ফলাফল পেয়েছি। এই উত্তরটি চিত্রের পাইটির "শীর্ষে" রঙের জন্য দুর্দান্ত কাজ করে। তবে বেশিরভাগ রং পাইতে "ভিতরে" কোথাও পড়তে চলেছে। এগুলিকে সাদা করার কাছাকাছি এনে তাদের "উপরে" সরানো প্রয়োজন (ক্রমবর্ধমান মান)।
পেজালো

বর্ধমান মানটি কাজ করতে প্রদর্শিত হতে পারে তবে এটি "হালকা রঙ পেতে" এর "মূল" কার্যকারিতা হবে না। একইভাবে, গা color় রঙ পেতে, সঠিক পন্থাটি হ'ল কেবল "মান" হ্রাস করা এবং স্যাচুরেশনটি যেমন হয় তেমন ছেড়ে দেওয়া ...
অ্যাভিয়েল গ্রস

38

সুইফট জন্য সার্বজনীন এক্সটেনশন iOS এবং OS X এর ব্যবহার getHue :

#if os(OSX)

    import Cocoa
    public  typealias PXColor = NSColor

    #else

    import UIKit
    public  typealias PXColor = UIColor

#endif

    extension PXColor {

    func lighter(amount : CGFloat = 0.25) -> PXColor {
        return hueColorWithBrightnessAmount(1 + amount)
    }

    func darker(amount : CGFloat = 0.25) -> PXColor {
        return hueColorWithBrightnessAmount(1 - amount)
    }

    private func hueColorWithBrightnessAmount(amount: CGFloat) -> PXColor {
        var hue         : CGFloat = 0
        var saturation  : CGFloat = 0
        var brightness  : CGFloat = 0
        var alpha       : CGFloat = 0

        #if os(iOS)

            if getHue(&hue, saturation: &saturation, brightness: &brightness, alpha: &alpha) {
                return PXColor( hue: hue,
                                saturation: saturation,
                                brightness: brightness * amount,
                                alpha: alpha )
            } else {
                return self
            }

            #else

            getHue(&hue, saturation: &saturation, brightness: &brightness, alpha: &alpha)
            return PXColor( hue: hue,
                            saturation: saturation,
                            brightness: brightness * amount,
                            alpha: alpha )

        #endif

    }

}

ব্যবহার:

let color = UIColor(red: 0.5, green: 0.8, blue: 0.8, alpha: 1.0)
color.lighter(amount:0.5)
color.darker(amount:0.5)

বা (ডিফল্ট মান সহ):

color.lighter()
color.darker()

নমুনা:

এখানে চিত্র বর্ণনা লিখুন


আমি একটি ত্রুটি পেয়েছি: -গেট হিউ: স্যাচুরেশন: উজ্জ্বলতা: আলফা: এনএসক্লোর এনএসক্যালাইব্রেটেডহাইট কালারস্পেস 0 1 এর জন্য বৈধ নয়; প্রথমে রঙের স্থান পরিবর্তন করতে হবে।
বেসি

2
এটি যোগ করে এটি ঠিক করুন: let color = usingColorSpaceName(NSCalibratedRGBColorSpace) এবং তারপরে getHueকলটির পরিবর্তে রঙের কল করুন:color?.getHue(&hue, saturation: &saturation, brightness: &brightness, alpha: &alpha)
ওসকার

_শব্দের পরিমাণের আগে ফাংশনটি অনুপস্থিত । হওয়া উচিতprivate func hueColorWithBrightnessAmount(_ amount: CGFloat) -> PXColor {
কোডমনক

আমি উত্তরে @ অস্কারের পরামর্শ যুক্ত করার পরামর্শ দিচ্ছি। এটি আমার জন্য একটি রানটাইম ক্র্যাশ ঠিক করেছিল।
বেসি

29

আমি আরজিবি-র চেয়েও একই ফলাফল দিতে চেয়েছিলাম

  • হালকা করার জন্য একটি সাদা ব্যাকগ্রাউন্ডের উপরে আলফা x% দিয়ে রঙ স্থাপন করা
  • গা background় কালো রঙের পটভূমির উপরে আলফা x% দিয়ে রঙ স্থাপন করা

গ্রেডিয়েন্ট সাইজের x% এ গ্রেডিয়েন্ট 'কালার হোয়াইট' বা 'কালার টু কালার' রঙ বেছে নেওয়ার চেয়ে এএফএইকি একই ফলাফল দেয়।

সেই উদ্দেশ্যে, গণিতটি সহজ:

extension UIColor {
    func mix(with color: UIColor, amount: CGFloat) -> UIColor {
        var red1: CGFloat = 0
        var green1: CGFloat = 0
        var blue1: CGFloat = 0
        var alpha1: CGFloat = 0

        var red2: CGFloat = 0
        var green2: CGFloat = 0
        var blue2: CGFloat = 0
        var alpha2: CGFloat = 0

        getRed(&red1, green: &green1, blue: &blue1, alpha: &alpha1)
        color.getRed(&red2, green: &green2, blue: &blue2, alpha: &alpha2)

        return UIColor(
            red: red1 * (1.0 - amount) + red2 * amount,
            green: green1 * (1.0 - amount) + green2 * amount,
            blue: blue1 * (1.0 - amount) + blue2 * amount,
            alpha: alpha1
        )
    }
}

এখানে কয়েকটি রঙের উদাহরণ রয়েছে

উদাহরণস্বরূপ গাark় এবং হালকা


আমি মনে করি এইচএসএল রঙের স্থান প্রয়োগ করে এমন কোনও বাহ্যিক গ্রন্থাগারটি অবলম্বন না করেই এটি সেরা বাস্তবায়ন
গোগ

24

ব্যবহারকারী529758 এর সমাধান সুইফটে:

গাark় রঙ:

func darkerColorForColor(color: UIColor) -> UIColor {

       var r:CGFloat = 0, g:CGFloat = 0, b:CGFloat = 0, a:CGFloat = 0

       if color.getRed(&r, green: &g, blue: &b, alpha: &a){
           return UIColor(red: max(r - 0.2, 0.0), green: max(g - 0.2, 0.0), blue: max(b - 0.2, 0.0), alpha: a)
       }

       return UIColor()
}

অপেক্ষাকৃত হালকা রঙ:

func lighterColorForColor(color: UIColor) -> UIColor {

       var r:CGFloat = 0, g:CGFloat = 0, b:CGFloat = 0, a:CGFloat = 0

       if color.getRed(&r, green: &g, blue: &b, alpha: &a){
           return UIColor(red: min(r + 0.2, 1.0), green: min(g + 0.2, 1.0), blue: min(b + 0.2, 1.0), alpha: a)
       }

       return UIColor()
}

1
এটি একটি উত্তরের উত্তর, যদি এটি আরও সুবিধাজনক না হয় তবে কেবলমাত্র এটি ইউআইকোলার শ্রেণীর জন্য একটি এক্সটেনশন হিসাবে ঘোষণা করা হয়েছিল var darker: UIColor
ব্রুনো ফিলিপ 13

13

আপনি যদি আরজিবি রঙকে এইচএসএল রঙের মডেলে রূপান্তর করেন তবে আপনি এল = লাইটনেস উপাদানটি এল = ০.০ (কালো) থেকে এল = ০.০ (প্রাকৃতিক রঙ) থেকে এল = ১.০ (সাদা) এ পরিবর্তন করতে পারেন। UIColorসরাসরি এইচএসএল পরিচালনা করতে পারে না, তবে আরজিবি <-> এইচএসএল রূপান্তর করার সূত্র রয়েছে।


এইচএসএল নয়, তবে এইচএসবি ঠিক আছে: developer.apple.com/library/ios/docamentation/uikit/references/… :
jrturton

8
এইচএসএল এবং এইচএসবি (কখনও কখনও এইচএসভিও বলা হয়) রঙের মডেলের মধ্যে পার্থক্য হ'ল এইচএসবি এল = 1.0 খাঁটি বর্ণের সাথে মিলিত হয়, যেখানে এইচএসএল এল = 1.0 এর সাথে সাদা এবং এল = 0.5 শুদ্ধ বর্ণের সাথে মিল রয়েছে। যেহেতু মূল পোস্টারটি উদাহরণস্বরূপ রঙ নীল (আরজিবি = 0/0/1) হালকা করার জন্য জিজ্ঞাসা করেছিল, তাই আমি মনে করি যে এইচএসএল আরও নমনীয়।
মার্টিন আর

6

সমাধান করা পোস্টগুলির কোনওটিই সব রং এবং ছায়া গোছাতে বেশ কার্যকরভাবে কাজ করে নি, তবে আমি তখন এই লাইব্রেরিটিতে হোঁচট খেয়েছি যা ইউআইক্লোরকে খুব ভালভাবে প্রয়োগ করা এক্সটেনশনের একটি সেট সরবরাহ করে।

বিশেষত এটির এইচএসএল বাস্তবায়নের অংশ হিসাবে এটি একটি হালকা ফাংশন রয়েছে: (UIColor *)lighten:(CGFloat)amount- যা নিখুঁতভাবে কাজ করে।


5

Sebyddd এক্সটেনশন হিসাবে সমাধান:

extension UIColor {    
    func darker() -> UIColor {

        var r:CGFloat = 0, g:CGFloat = 0, b:CGFloat = 0, a:CGFloat = 0

        if self.getRed(&r, green: &g, blue: &b, alpha: &a){
            return UIColor(red: max(r - 0.2, 0.0), green: max(g - 0.2, 0.0), blue: max(b - 0.2, 0.0), alpha: a)
        }

        return UIColor()
    }

    func lighter() -> UIColor {

        var r:CGFloat = 0, g:CGFloat = 0, b:CGFloat = 0, a:CGFloat = 0

        if self.getRed(&r, green: &g, blue: &b, alpha: &a){
            return UIColor(red: min(r + 0.2, 1.0), green: min(g + 0.2, 1.0), blue: min(b + 0.2, 1.0), alpha: a)
        }

        return UIColor()
    }
}

ব্যবহার:

let darkerYellow = UIColor.yellow.darker()
let lighterYellow = UIColor.yellow.lighter()

2

আপনি যদি ব্যবহারকারী 529758 এর সমাধানটি ধূসর শেডগুলির সাথে কাজ করতে চান তবে (যেমন [UIColor lightGrayColor]বা [UIColor darkGrayColor] আপনাকে এটির মতো উন্নতি করতে হবে:

- (UIColor *)lighterColor
{
    CGFloat h, s, b, a;
    if ([self getHue:&h saturation:&s brightness:&b alpha:&a]) {
        return [UIColor colorWithHue:h
                          saturation:s
                          brightness:MIN(b * 1.3, 1.0)
                               alpha:a];
    }

    CGFloat white, alpha;
    if ([self getWhite:&white alpha:&alpha]) {
        white = MIN(1.3*white, 1.0);
        return [UIColor colorWithWhite:white alpha:alpha];
    }

    return nil;
}

getHue:saturation:brightness:alphafalseধূসর ছায়ায় কল করা হলে ব্যর্থ হয় (এবং ফিরে আসে ) সুতরাং আপনাকে ব্যবহারের প্রয়োজন getWhite:alpha


2

ইউআইকিওলোর এক্সটেনশন এবং ফিক্সিং লাইটার কালার ফর কালার

extension UIColor {
  class func darkerColorForColor(color: UIColor) -> UIColor {
    var r:CGFloat = 0, g:CGFloat = 0, b:CGFloat = 0, a:CGFloat = 0
    if color.getRed(&r, green: &g, blue: &b, alpha: &a){
      return UIColor(red: max(r - 0.2, 0.0), green: max(g - 0.2, 0.0), blue: max(b - 0.2, 0.0), alpha: a)
    }
    return UIColor()
  }

  class func lighterColorForColor(color: UIColor) -> UIColor {
    var r:CGFloat = 0, g:CGFloat = 0, b:CGFloat = 0, a:CGFloat = 0
    if color.getRed(&r, green: &g, blue: &b, alpha: &a){
      let tmpColor = UIColor(red: min(r + 0.2, 1.0), green: min(g + 0.2, 1.0), blue: min(b + 0.2, 1.0), alpha: a)
      println(tmpColor)
      return tmpColor
    }
    return UIColor()
  }
}

2

এই থ্রেডের অন্য সমস্ত উত্তর আরবিবি রঙিন সিস্টেমটি ব্যবহার করে বা এইচএসবি সিস্টেমের হিউ বা উজ্জ্বলতার মান পরিবর্তন করে । এই দুর্দান্ত ব্লগ পোস্টে বিস্তারিতভাবে বর্ণিত হিসাবে একটি রঙ হালকা বা গাer় করার সঠিক উপায়টি এর luminanceমান পরিবর্তন করা । অন্য উত্তরগুলির কোনওটিই তা করে না। আপনি যদি এটি সঠিকভাবে করতে চান, তবে আমার সমাধানটি ব্যবহার করুন বা ব্লগ পোস্টটি পড়ে আপনার নিজের লিখুন


দুর্ভাগ্যক্রমে কোনও ইউআইকলারের বৈশিষ্ট্য ডিফল্টরূপে পরিবর্তন করতে এটি বেশ ঝামেলা । এছাড়াও অ্যাপল এমনকি এইচসিএল মত কোন ল্যাব ভিত্তিক রঙ স্থান সমর্থন করে না শ্রেণী ( ল্যাবের হয় মান আমরা খুঁজছেন করা হয়)।UIColorLluminance

ব্যবহার HandyUIKit (কার্থেজের মাধ্যমে এটি ইনস্টল করুন) জন্য সমর্থন যোগ করা এইচসিএল এবং আপনার জীবন তোলে অনেক সহজ :

import HandyUIKit    

let color = UIColor(red: 0.5, green: 0.5, blue: 0.5, alpha: 1.0)

// create a new UIColor object with a specific luminance (slightly lighter)
color.change(.luminance, to: 0.7)

আপেক্ষিক পরিবর্তন প্রয়োগ করার জন্য একটি বিকল্পও রয়েছে (প্রস্তাবিত):

// create a new UIColor object with slightly darker color
color.change(.luminance, by: -0.2)

নোট করুন যে হ্যান্ডইইউইকিট আপনার প্রকল্পে আরও কিছু হ্যান্ডি ইউআই বৈশিষ্ট্য যুক্ত করেছে - আরও তথ্যের জন্য গিটহাবে তার পুনর্নির্মাণটি চেকআউট করুন।

আমি আসা করি এটা সাহায্য করবে!


আমার অ্যাপ্লিকেশানের জন্য আমি মানচিত্রে রুটগুলি আঁকছি। আমি 100% উজ্জ্বলতার সাথে একটি রঙের অভ্যন্তরের লাইনে এবং সেই রঙের গাer় বৈকল্পিকের সাথে সীমানাটি আঁকতে চেয়েছিলাম। কারণ অভ্যন্তরীণ লাইনে ইতিমধ্যে 100% উজ্জ্বলতা ছিল কোনও পদ্ধতিতে কাজ হয়নি। এছাড়াও উপরে উল্লিখিত মত আলোকিত পরিবর্তনটি কৌশলটি করেনি। তবে, এই খুব সুন্দর এক্সটেনশনটি ব্যবহার করে উজ্জ্বলতা হ্রাস করা আমার জন্য কৌশলটি করেছে। 'color.change (। ব্রাইটনেস, দ্বারা: -0.5)' এটি ব্যবহারের ক্ষেত্রে এই এক্সটেনশনটি খুব নমনীয় এবং এর প্রচুর বিকল্প রয়েছে। আমি সুপারিশ করছি যদি বিশেষত আপনার কয়েকটি থিম বা রঙ প্যালেট সহ একটি অ্যাপ থাকে have
গাইড

1

আমি নিশ্চিত না আপনি কোনও ধরণের উদ্দেশ্য-সি উত্তর খুঁজছেন কিনা, তবে আরজিবিএ দ্বারা বর্ণিত রংগুলির ভিত্তিতে আমি মনে করি আপনি একটি "লাইটার" পেতে একটি স্বেচ্ছাসেবী ফ্যাক্টর অনুসারে আরজিবি মানগুলি সহজেই স্কেল করতে পারেন বা "গাer়" ছায়া উদাহরণস্বরূপ, আপনার একটি নীল থাকতে পারে:

[UIColor colorWithRed:0.0 green:0.0 blue:1.0 alpha:1.0];

গা dark় নীল চান? আরজিবি মানগুলিকে ০.৯ দিয়ে গুণ করুন:

[UIColor colorWithRed:0.0 green:0.0 blue:0.9 alpha:1.0];

Voila। অথবা আপনার কমলা থাকতে পারে:

[UIColor colorWithRed:1.0 green:0.4 blue:0.0 alpha:1.0];

আর একটি স্কেল ফ্যাক্টর চয়ন করুন, বলুন, 0.8:

[UIColor colorWithRed:0.8 green:0.32 blue:0.0 alpha:1.0];

আপনি যে সন্ধানটি সন্ধান করছেন সেটি কি?


হ্যাঁ হ্যাঁ এটি আমার যা প্রয়োজন তার অর্ধেক। হালকা রঙ পাওয়ার কোনও উপায় কি তখন নীল যখন 1 (সর্বোচ্চ) হয়
কোরের কোড

@ কোরকোড নং, আসলেই নয়। আপনি যদি না চান তবে ডিভাইসের স্ক্রিনের বার্গেটনেস :) আমার উত্তর দেখুন।

1

আইওএস 12 এর জন্য সুইফট 4.x দিয়ে এক্সকোড 10 এ পরীক্ষা করা হয়েছে

আপনার রঙটি ইউআইকলার হিসাবে শুরু করুন এবং গা dark় ফ্যাক্টরটি বেছে নিন (সিজিফ্লোয়াইট হিসাবে)

let baseColor = UIColor.red
let darkenFactor: CGFloat = 2

টাইপ সিজি कलোরের একটি alচ্ছিক মান রয়েছে componentsযা রঙটি আরজিবিএতে বিভক্ত করে (0 এবং 1 এর মধ্যে মান সহ একটি সিজিফ্লোয়েট অ্যারে হিসাবে)। এরপরে আপনি সিজি কলার থেকে নেওয়া আরজিবিএ মানগুলি ব্যবহার করে একটি ইউআইকলার পুনর্গঠন করতে পারেন এবং সেগুলি ম্যানিপুলেট করতে পারেন।

let darkenedBase = UIColor(displayP3Red: startColor.cgColor.components![0] / darkenFactor, green: startColor.cgColor.components![1] / darkenFactor, blue: startColor.cgColor.components![2] / darkenFactor, alpha: 1)

এই উদাহরণে, প্রতিটি আরজিবি ভলিউজকে 2 দ্বারা বিভক্ত করা হয়েছিল, রঙটি আগের মতো অর্ধেক অন্ধকার করে তুলেছিল। আলফা মানটি একই রইল, তবে আপনি আরজিবি পরিবর্তে আলফা মানটির উপর অন্ধকার গুণকটি প্রয়োগ করতে পারেন।


1

সুইফট 5

extension UIColor {

func lighter(by percentage:CGFloat=30.0) -> UIColor? {
    return self.adjust(by: abs(percentage) )
}

func darker(by percentage:CGFloat=30.0) -> UIColor? {
    return self.adjust(by: -1 * abs(percentage) )
}
func adjust(by percentage:CGFloat=30.0) -> UIColor? {
    var r:CGFloat=0, g:CGFloat=0, b:CGFloat=0, a:CGFloat=0;
    if(self.getRed(&r, green: &g, blue: &b, alpha: &a)){
        return UIColor(red: min(r + percentage/100, 1.0),
                       green: min(g + percentage/100, 1.0),
                       blue: min(b + percentage/100, 1.0),
                       alpha: a)
    }else{
        return nil


     }
    }
}

0

আদর্শভাবে, ফাংশনগুলি একটি UIColorএক্সটেনশান নামে ডাকা হয় UIColor+Brightness.swiftএবং একটি কনফিগারযোগ্য উজ্জ্বলতা থাকা উচিত - নীচের উদাহরণটি দেখুন:

import UIKit

extension UIColor {

  func lighterColorWithBrightnessFactor(brightnessFactor:CGFloat) -> UIColor {
    var r:CGFloat = 0, g:CGFloat = 0, b:CGFloat = 0, a:CGFloat = 0
    if self.getRed(&r, green:&g, blue:&b, alpha:&a) {
      return UIColor(red:min(r + brightnessFactor, 1.0),
        green:min(g + brightnessFactor, 1.0),
        blue:min(b + brightnessFactor, 1.0),
        alpha:a)
    }
    return UIColor()
  }

}

0

আমি স্থিতির মানের উপর ভিত্তি করে রঙিন ঘরগুলি রেন্ডার করি:

অবস্থা-চিত্র

ক্রাইনিং হিপ্পোর পরামর্শটি ব্যবহার করার সময় ত্রুটি হওয়ার পরে আমি এর জন্য কিছু পুরানো ওজেক কোডের উপর ভিত্তি করে একটি সুইফট এক্সটেনশন লিখেছিলাম:

extension UIColor{

    func darker(darker: CGFloat) -> UIColor{

        var red: CGFloat = 0.0
        var green: CGFloat = 0.0
        var blue: CGFloat = 0.0

        if self.colorSpace == UIColorSpace.genericGrayColorSpace(){

            red =  whiteComponent - darker
            green = whiteComponent - darker
            blue  = whiteComponent - darker
        } else {
            red = redComponent - darker
            green = greenComponent - darker
            blue = blueComponent - darker
        }

        if red < 0{
            green += red/2
            blue += red/2
        }

        if green < 0{
            red += green/2
            blue += green/2
        }

        if blue < 0{
            green += blue/2
            red += blue/2
        }

        return UIColor(
            calibratedRed: red,
            green: green,
            blue: blue,
            alpha: alphaComponent
        )
    }

    func lighter(lighter: CGFloat) -> UIColor{
        return darker(-lighter)
    }
}

একই NSColorহিসাবে কাজ করে । কেবল UIColorসঙ্গে প্রতিস্থাপন NSColor


0

এখানে একটি ইউআইসিক্লোর বিভাগ রয়েছে যা রঙ পরিবর্তনের পরিমাণ নিয়ন্ত্রণ করতে দেয়।

- (UIColor *)lighterColorWithDelta:(CGFloat)delta
{
    CGFloat r, g, b, a;
    if ([self getRed:&r green:&g blue:&b alpha:&a])
        return [UIColor colorWithRed:MIN(r + delta, 1.0)
                               green:MIN(g + delta, 1.0)
                                blue:MIN(b + delta, 1.0)
                               alpha:a];
    return nil;
}

- (UIColor *)darkerColorWithDelta:(CGFloat)delta
{
    CGFloat r, g, b, a;
    if ([self getRed:&r green:&g blue:&b alpha:&a])
        return [UIColor colorWithRed:MAX(r - delta, 0.0)
                               green:MAX(g - delta, 0.0)
                                blue:MAX(b - delta, 0.0)
                               alpha:a];
    return nil;
}

0

@ এসবিডিডিডি উত্তরের ভিত্তিতে একটি সুইফট এক্সটেনশন:

import Foundation
import UIKit

extension UIColor{
    func colorWith(brightness: CGFloat) -> UIColor{
        var r:CGFloat = 0, g:CGFloat = 0, b:CGFloat = 0, a:CGFloat = 0

        if getRed(&r, green: &g, blue: &b, alpha: &a){
            return UIColor(red: max(r + brightness, 0.0), green: max(g + brightness, 0.0), blue: max(b + brightness, 0.0), alpha: a)
        }

        return UIColor()
    }
}

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.