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 기능 도 추가합니다 . 자세한 내용 은 GitHub 의 README 를 확인하십시오.

도움이 되길 바랍니다!


내 응용 프로그램의 경우지도에 경로를 그립니다. 나는 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.