15

UIColor があるとしましょう

UIColor *color = [UIColor redColor];

彩度/色相/明るさを変更したいのですが、どうすればいいですか? ドキュメントを読みましたが、まだ本当に混乱しています

作成した UIColor ([UIColor redColor]) を変更して、いくつかの設定で新しい色を開始したくありません。オリジナルを保持したまま変更するにはどうすればよいですか。私はメソッドについて知っていcolorWithHue:saturation:brightness:alpha:ます。赤い色を維持しながら、既存の色のプロパティを更新する必要があります。

4

10 に答える 10

22

色を呼び出しgetHue:saturation:brightness:alpha:て値を調整し、調整したコンポーネントで新しい色を作成することができます+[UIColor colorWithHue:saturation:brightness:alpha:]

CGFloat hue, saturation, brightness, alpha ;
BOOL ok = [ <color> getHue:&hue saturation:&saturation brightness:&brightness alpha:&alpha ] ;
if ( !ok ) { 
    // handle error 
}
// ... adjust components..

UIColor * newColor = [ UIColor colorWithHue:hue saturation:saturation brightness:brightness alpha:alpha ] ;
于 2013-03-15T09:12:58.350 に答える
15

役に立つと思われる迅速なUIColor拡張機能を次に示します。

extension UIColor {

    func modified(withAdditionalHue hue: CGFloat, additionalSaturation: CGFloat, additionalBrightness: CGFloat) -> UIColor {

        var currentHue: CGFloat = 0.0
        var currentSaturation: CGFloat = 0.0
        var currentBrigthness: CGFloat = 0.0
        var currentAlpha: CGFloat = 0.0

        if self.getHue(&currentHue, saturation: &currentSaturation, brightness: &currentBrigthness, alpha: &currentAlpha){
            return UIColor(hue: currentHue + hue,
                           saturation: currentSaturation + additionalSaturation,
                           brightness: currentBrigthness + additionalBrightness,
                           alpha: currentAlpha)
        } else {
            return self
        }
    }
}
于 2016-09-06T18:39:16.087 に答える
3

残念ながら、デフォルトで UIColorのまたはの値を変更するのは非常に面倒です。HandyUIKit (Carthage 経由でインストール)を使用すると、作業がずっと簡単になります。hsbargba

import HandyUIKit  

// each line creates a new UIColor object with the new value
color.change(.hue,        to: 0.1)
color.change(.brightness, to: 0.2)
color.change(.saturation, to: 0.3)
color.change(.alpha,      to: 0.4)

// chaining them returns a single new object with all values changed
color.change(.hue,        to: 0.5)
     .change(.brightness, to: 0.6)
     .change(.saturation, to: 0.7)

相対的な変更を適用するオプションもあります:

// create a new UIColor object with hue & brightness increased by 0.2
color.change(.hue,        by: 0.2)
     .change(.brightness, by: 0.2)

このライブラリは、他にもいくつかの便利な UI 機能をプロジェクトに追加します。詳細については、GitHub の README をチェックしてください。

それが役立つことを願っています!

于 2016-06-30T18:21:11.920 に答える
0

このメソッドを使用するには、次の値を設定します

UIColor *customColor = [UIColor colorWithHue: x.xx saturation: x.xx brightness: x.xx alpha: 1.0];

于 2013-03-15T09:12:02.220 に答える
0

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIColor_Class/Reference/Reference.html

クラス関数がありますcolorWithHue:saturation:brightness:alpha:

もちろんgetHue:saturation:brightness:alpha:、初期化時に変更を加える前に最初に使用できます[UIColor redColor]

于 2013-03-15T09:12:58.803 に答える
-1

これを次のように変更するだけです。

[UIColor colorWithHue:YourHueValue saturation:YourSaturationValue brightness:YourBrightnessValueValue alpha:1.00];

alpha はビューの不透明度を表し、範囲は 0.0 ~ 1.0 です。

于 2013-03-15T09:14:19.237 に答える
-1

UIColor は彩度/色相/明るさを変更できません。CoreImage を変更できます。

以下のサンプルコード:

CIFilter *filter = [CIFilter filterWithName:@"CIColorControls"];

[filter setValue:[NSNumber numberWithFloat:1.0] forKey:@"inputContrast"];
[filter setValue:[NSNumber numberWithFloat:1.0] forKey:@"inputSaturation"];
[filter setValue:[NSNumber numberWithFloat:0.0] forKey:@"inputBrightness"];


[filter setValue:_A_CIImage_ forKey:kCIInputImageKey];

CIImage *_outputImage = filter.outputImage;

CIContext context = [CIContext contextWithOptions:nil];

CGImageRef outputImageRef = [context createCGImage: _outputImage fromRect:[_outputImage extent]];
于 2013-03-15T09:21:57.210 に答える
-4
[UIColor colorWithHue:0.10 saturation:0.16 brightness:0.13 alpha:1.00];
于 2013-03-15T09:14:34.087 に答える