[解決済み] UIColorから少し明るめの色と暗めの色を手に入れる
2022-05-08 06:48:09
質問
任意のUIColorをグラデーションに変換できるようにしたいと考えていました。私が意図している方法は、Core Graphicsを使用してグラデーションを描画することです。私がしようとしているのは、ある色を取得することです。
[UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:1.0];
で、数シェード暗く、数シェード明るいUIColorを取得します。どなたか、この方法をご存じないでしょうか?ありがとうございます。
どのように解決するのですか?
- (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];
EDIT : @Anchu Chimala が指摘したように、最大限の柔軟性を得るためには、これらのメソッドは UIColor カテゴリとして実装されるべきです。また、@Rileyのアイデアから、定数値を加減するのではなく、プロトタイプ的に色を濃くしたり薄くしたりするのが良いかもしれません。jrturtonさんが指摘されているように、RGB成分を操作する必要はなく、brightnessプロパティそのものを変更した方が良いようです。すべてにおいてです。
@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
関連
-
[解決済み] MPProgressHUDとNSSessionを使用したデータシンクの読み込み
-
[解決済み] C言語:拡張子「.mm」は何の略ですか?
-
[解決済み] アーキテクチャ i386 のシンボルが見つかりませんでした。
-
[解決済み] FBLoginVIewをカスタマイズするには?
-
[解決済み] objcの "pi "と "M_PI "の違いは何ですか?
-
[解決済み】UITableViewControllerを使用しないUIRefreshControl
-
[解決済み】NSStringが特定の文字で始まるかどうかを確認する方法
-
[解決済み】Swiftコンパイラーエラー。"フレームワークモジュール内の非モジュラーヘッダー"
-
[解決済み】Objective-Cでオブジェクトがどのクラスであるかをテストするにはどうすればよいですか?
-
[解決済み] [Solved] UITableViewがReloadDataを完了したことを伝えるには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Objective-Cのnil、NIL、nullの違いについて
-
非静的宣言に続く "****"の静的宣言
-
[解決済み] iOS 8で位置情報サービスが利用できない
-
[解決済み] NSStringをNSNumberに変換する方法
-
[解決済み] Objective-Cで抽象クラスを作成する
-
[解決済み] Objective-CでNSArrayを逆引きするにはどうしたらいいですか?
-
[解決済み】NSDateをNSStringに変換する。
-
[解決済み】UITableViewからセパレータラインを削除する方法はありますか?
-
[解決済み】NSStringが特定の文字で始まるかどうかを確認する方法
-
[解決済み】iOSでメールアドレスが有効であることを確認する【重複あり