UIColor에서 약간 더 밝고 어두운 색상 얻기


144

UIColor를 그라디언트로 바꿀 수 있기를 원했습니다. 내가하려고하는 방식은 Core Graphics를 사용하여 그라디언트를 그리는 것입니다. 내가하려고하는 것은 색상을 얻는 것입니다.

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

그리고 몇 가지 색조가 더 어둡고 몇 가지 색조가 더 밝은 UIColor를 얻습니다. 누구든지 이것을하는 방법을 알고 있습니까? 감사합니다.


1
"그라데이션 (gradient)"은 이미지의 한 부분이 색상의 한 음영이며 다른 부분은 더 어둡거나 밝은 음영임을 나타냅니다. 이것이 당신이하고 싶은 것을 정의하는 또 다른 방법입니까?
Michael Dautermann

2
이 라이브러리를 살펴보십시오. github.com/yannickl/DynamicColor
onmyway133

스위프트 색상 채도 및 밝기 사용 stackoverflow.com/a/30012117/2303865을
레오 버스들이시길

답변:


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];

편집 : @Anchu Chimala가 지적했듯이 최대한의 유연성을 위해 이러한 메서드는 UIColor 범주로 구현해야합니다. 또한 @Riley의 아이디어에서 상수 값을 더하거나 빼는 대신 색상을 비례 적으로 더 어둡거나 밝게 만드는 것이 좋습니다. @jrturton이 지적했듯이 RGB 구성 요소를 조작 할 필요는 없습니다. 밝기 속성 자체를 수정하는 것이 좋습니다. 전체적으로 :

@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
색조, 채도, 밝기로 동일한 작업을 수행 할 수 있고 밝기가 변경된 상태에서 색상을 다시 빌드 할 때 왜 RGB를 사용합니까?
jrturton

2
HSB 버전을 직접 사용해 보았지만 예상대로 작동하지 않았습니다. getHue:saturation:brightnessUIKit 의 서명 에도 불구하고 HSB 대신 HSV에서 작동하는 것 같습니다. 이 컨텍스트에서 밝기 (실제로 값)를 변경하면 작동하지 않습니다. 예를 들어 순수한 빨강 (rgb (255,0,0))은 밝기 / 값이 1이므로 밝기를 통한 조명이 불가능합니다. 대신 RGB 값을 변경하여 작업했습니다.
rchampourlier 2016 년

2
나는 당신의 대답에 혼란스러운 것이 있다고 생각합니다 : 당신은 두 가지 접근법 (하나는 RGB를 사용하고 다른 하나는 카테고리 버전을 위해 HSB를 사용)을 취합니다. 동일한 결과는 없습니다 ... 그리고 그것은 의미 : 밝게하는 것은 실제로 색상을 흰색 (검은 색으로 어둡게)으로 만드는 반면 밝기 / 값을 변경하면 더 강하게 만듭니다 (일반적으로 밝게).
rchampourlier 2016 년

4
이 방법을 회색 음영으로 사용하면 실패합니다. getHue:saturation:brightness:alphaFALSE를 반환합니다.
Matthieu Riegler

2
이것이 왜 궁금 허용 대답 으로 모두 제안 된 솔루션은 잘못된 . 둘 다 인간이 '밝은'또는 '더 어두운'색으로 인식하는 것과 거의 관련이없는 이론적 인 값 을 변경 합니다. 이 게시물 (shortlink : goo.gl/qqgk9V)을 읽고 의미하는 바를 이해하는 것이 좋습니다 . luminanceLAB 색상 공간값이 색상을 밝거나 어둡게 만들 때주의해야 할 사항 이라고 설명합니다 . 어떻게 그것을 사용 하고이 문제를 올바른 방법으로 해결할 수 있는지대한 내 대답 을 참조하십시오 .
Jeehut

59

TL; DR :

빠른:

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

목표 -C :

- (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];
}

@rchampourlier는 @ user529758에 대한 그의 의견에 옳았습니다 (허용 된 답변)-HSB (또는 HSV) 및 RGB 솔루션은 완전히 다른 결과를 제공합니다. RGB는 단지 흰색을 추가하거나 (또는 ​​색상을 더 가깝게 만듭니다) HSB 솔루션은 Brigtness 스케일의 가장자리에 더 가깝게 색상을 가져옵니다. 기본적으로 검은 색으로 시작하고 순수한 색상으로 끝납니다 ...

기본적으로 밝기 (값)는 색상을 검은 색에 가깝게 또는 더 가깝게 만들고 채도는 흰색에 가깝거나 더 가깝게 만듭니다 ...

여기에서 볼 수 있듯이 :

HSV 컬러 그래프

따라서 실제로 색상을 더 밝게 (즉, 흰색에 더 가깝게) 만드는 솔루션 은 채도 값을 더 작게 만들어이 솔루션 을 만듭니다 .

- (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;
}

색상을 밝게 만드는 것과 관련하여 : 채도를 줄이고 밝기 / 값을 높이면 최상의 결과를 얻었습니다. 이 답변은 이미지에서 파이의 "위"색상에 적합합니다. 그러나 대부분의 색상은 파이의 "내부"어딘가에 떨어질 것입니다. 그것들을 흰색에 가깝게 가져 오려면 "위로"이동시켜야합니다 (값 증가).
pejalo

값이 증가하는 것처럼 보이지만 "더 밝은 색상을 얻는" "핵심"기능은 아닙니다. 같은 방법으로, 더 어두운 색을 얻으려면 올바른 접근 방식은 "값"만 줄이고 채도를 그대로 유지하는 것입니다.
Aviel Gross

38

getHue를 사용하여 iOS 및 OS X 용 Swift 범용 확장 :

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

OR (기본값) :

color.lighter()
color.darker()

샘플 :

여기에 이미지 설명을 입력하십시오


오류가 발생했습니다. -getHue : saturation : brightness : alpha : NSColor에 유효하지 않습니다. NSCalibratedWhiteColorSpace 0 1; 먼저 색 공간을 변환해야합니다.
Besi

2
let color = usingColorSpaceName(NSCalibratedRGBColorSpace) 다음 을 추가하여 문제를 해결 한 다음 getHue통화를 색상 통화로 교체합니다 .color?.getHue(&hue, saturation: &saturation, brightness: &brightness, alpha: &alpha)
Oskar

_단어 양 앞에 함수가 누락되었습니다 . private func hueColorWithBrightnessAmount(_ amount: CGFloat) -> PXColor {
Codemonk

@Oskar의 제안을 답변에 추가하는 것이 좋습니다. 이것은 나를 위해 런타임 충돌을 수정했습니다.
Besi

29

RGB와 동일한 결과를 원했습니다.

  • 흰색 배경 위에 알파 x %로 색상을 배치하여 밝게
  • 검정색 배경 위에 알파 x %로 색상을 배치하여 어둡게

그래디언트 크기의 x %에서 '컬러 투 화이트'또는 '컬러 투 블랙'그라디언트에서 색상을 선택하는 것과 동일한 결과 인 AFAIK를 제공합니다.

이를 위해 수학은 간단합니다.

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

다음은 일부 색상의 예입니다

더 어둡고 밝은 예


HSL 색상 공간을 구현하는 외부 라이브러리에 의존하지 않고 이것이 최선의 구현이라고 생각합니다.
gog

24

스위프트에서의 user529758의 솔루션 :

어두운 색 :

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예를 들어 UIColor 클래스의 확장으로 선언 된 것이 더 편리하다는 것을 제외하고는 좋은 대답 입니다.
Bruno Philipe

13

RGB 색상을 HSL 색상 모델 로 변환하면 L = 밝기 구성 요소를 L = 0.0 (검정)에서 L = 0.5 (자연 색상) 이상 L = 1.0 (흰색)으로 변경할 수 있습니다. UIColorHSL을 직접 처리 할 수 ​​없지만 RGB <-> HSL을 변환하는 공식이 있습니다.


HSL은 아니지만 HSB는 괜찮습니다. : developer.apple.com/library/ios/documentation/uikit/reference/… :
jrturton

8
HSL과 HSB (때때로 HSV라고도 함) 색상 모델의 차이는 HSB L = 1.0에서 순수한 색상에 해당하는 반면 HSL L = 1.0은 흰색에, L = 0.5는 순수한 색상입니다. 원래 포스터는 예를 들어 파란색 (RGB = 0 / 0 / 1)을 더 밝게 만드는 방법을 요청했기 때문에 HSL이 더 유연하다고 생각합니다.
Martin R

6

솔루션의 아무도는 게시 된 아주 모든 색상과 음영을 위해 일하지,하지만 난 운 좋게 발견 한 이 라이브러리 UIColor에 아주 잘 구현 확장 세트를 제공합니다.

특히 HSL 구현의 일부로 밝게 기능합니다 (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

당신은 같은 회색 음영 작업 (에 user529758의 솔루션을 원하는 경우 [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

UIColor 확장 및 고정 라이터

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

이 스레드의 다른 모든 답변 은 RGB 색상 시스템을 사용 하거나 HSB 시스템색조 또는 밝기 값을 간단히 변경합니다 . 에서 자세히 설명한 바와 같이 이 위대한 블로그 게시 정확한 색상이 밝거나 어둡게은 변경하는 것입니다 만드는 방법 luminance값입니다. 다른 답변은 없습니다. 제대로하고 싶다면 블로그 게시물을 읽은 후 내 솔루션사용 하거나 직접 작성하십시오 .


불행히도 기본적으로 UIColor의 속성을 변경하는 것은 상당히 번거 롭습니다 . 또한 Apple은 클래스의 HCL과 같은 LAB 기반 색 공간도 지원하지 않습니다 ( LAB는 우리가 찾고 있는 가치입니다).UIColorLluminance

HandyUIKit (Carthage를 통해 설치)을 사용하면 HCL에 대한 지원이 추가 되고 인생 이 훨씬 쉬워집니다 .

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)

HandyUIKit은 프로젝트에 다른 편리한 UI 기능 도 추가합니다 . 자세한 내용 은 GitHubREADME 를 확인하십시오.

도움이 되길 바랍니다!


내 응용 프로그램의 경우지도에 경로를 그립니다. 나는 100 % 밝기를 가진 색상의 내부 라인과 그 색상의 더 어두운 변형으로 테두리를 그려보고 싶었습니다. 내부 선은 이미 100 % 밝기를 가지기 때문에 어떤 방법도 작동하지 않았습니다. 위에서 언급 한 것처럼 휘도를 변경해도 트릭이 발생하지 않았습니다. 그러나이 멋진 확장 기능을 사용하여 밝기를 줄이면 속임수가되었습니다. 'color.change (.brightness, by : -0.5)'이 확장 프로그램은 사용이 매우 유연하고 많은 옵션이 있습니다. 특히 여러 테마 또는 색상 팔레트가있는 앱이있는 경우 권장됩니다.
guido

1

Objective-C 답변을 찾고 있는지 확실하지 않지만 RGBA에 지정된 색상의 작동 방식에 따라 임의의 요소에 따라 RGB 값을 간단히 조정하여 "가벼운"또는 "어두운"그늘. 예를 들어 파란색이있을 수 있습니다.

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

진한 파란색을 원하십니까? RGB 값에 0.9를 곱하십시오.

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

짜잔 또는 주황색이있을 수도 있습니다.

[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 (최대) 일 때 더 밝은 색상을 얻는 방법이 있습니까?
CoreCode

@CoreCode 아니요, 실제로는 아닙니다. 장치 화면의 birghtness를 변경하지 않으려면 :) 내 대답을 참조하십시오.

1

iOS 12 용 Swift 4.x로 Xcode 10에서 테스트

색상으로 UIColor로 시작하고 어둡게하는 요소 (CGFloat로)를 선택하십시오.

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

CGColor 유형에는 componentsRGBA로 색상을 세분화 하는 선택적 값 이 있습니다 (0과 1 사이의 값을 갖는 CGFloat 배열로). 그런 다음 CGColor에서 가져온 RGBA 값을 사용하여 UIColor를 재구성하고 조작 할 수 있습니다.

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

이 예에서는 RGB valuse를 각각 2로 나눠서 이전보다 절반 정도 어둡게 만들었습니다. 알파 값은 동일하게 유지되었지만 RGB 대신 알파 값에 더 어두운 요소를 적용 할 수도 있습니다.


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

상태 값을 기준으로 컬러 셀을 렌더링합니다.

상태 이미지

이를 위해 CryingHippo의 제안을 사용하여 오류가 발생한 후 오래된 objc 코드를 기반으로 신속한 확장 기능을 작성했습니다.

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 범주입니다.

- (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

@Sebyddd 답변을 기반으로 한 Swift 확장 프로그램 :

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()
    }
}

-1

어두운 색의 경우 가장 간단합니다. theColor = [theColor shadowWithLevel : s]; //s:0.0에서 1.0


이 방법은 UIColor가 아닌 NSColor에서만 사용할 수 있습니다.
followben
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.