UIColor
を16進数値に変換する簡単な方法はありますか?
または、CGColorGetComponents
でRGBコンポーネントを取得してからそこから作業する必要がありますか?UIColorから16進数(ウェブカラー)
たとえばCGColorGetComponents(color.CGColor)[0] * 256
?
UIColor
を16進数値に変換する簡単な方法はありますか?
または、CGColorGetComponents
でRGBコンポーネントを取得してからそこから作業する必要がありますか?UIColorから16進数(ウェブカラー)
たとえばCGColorGetComponents(color.CGColor)[0] * 256
?
Erica SadunのUIColorカテゴリを使用することを検討します。これには、16進表記を含む多くの機能が無料で含まれています。使い方はとても簡単です。使用しているクラスヘッダーに追加するか、あらかじめコンパイルされたヘッダーに追加して、究極の柔軟性を実現してください。 あなたはこのようなものに非常に似た操作を行い、プリコンパイルされたヘッダに追加している場合:https://github.com/erica/uicolor-utilities
:#ifdef __OBJC__
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "UIColor-Expanded.h"
#endif
その後、あなたはUIColorのカテゴリにとてもNSLog(@"%@", [myColor hexStringFromColor]);
GitHubのリンクのようにそれを使用することができます
についてのArsTechnicaの記事:http://arstechnica.com/apple/guides/2009/02/iphone-development-accessing-uicolor-components.ars
私が知る限り、組み込みのソリューションはありません。
ただし、256
の代わりに255
を乗算する必要があります。
16進表現を取得するのは簡単な作業なので、手動で文字列を作成する際には多くの問題がありません。
NSLog(@"%X%X%X", redInteger, greenInteger, blueInteger);
また、UIColorをその16進数のコンポーネントに変換する必要がありました。
すでにlewiguezによって指摘されているように、すべてのものを行うgithubに非常に良いカテゴリがあります。
私はそれがどのように行われたかを知りたかったので、私は自分の単純なRGBカラーの実装を行いました。
+ (NSString*)colorToWeb:(UIColor*)color
{
NSString *webColor = nil;
// This method only works for RGB colors
if (color &&
CGColorGetNumberOfComponents(color.CGColor) == 4)
{
// Get the red, green and blue components
const CGFloat *components = CGColorGetComponents(color.CGColor);
// These components range from 0.0 till 1.0 and need to be converted to 0 till 255
CGFloat red, green, blue;
red = roundf(components[0] * 255.0);
green = roundf(components[1] * 255.0);
blue = roundf(components[2] * 255.0);
// Convert with %02x (use 02 to always get two chars)
webColor = [[NSString alloc]initWithFormat:@"%02x%02x%02x", (int)red, (int)green, (int)blue];
}
return webColor;
}
フィードバックはすべて歓迎です!
このメソッドは完全に動作します、ありがとう! – BFeher
広く使用されている文字列ベースのソリューション以外は、ここでは16進(整数)ベースのソリューションです。使用法:
UIColor* color = lf_rgb(0x120aef);
log(@"color %.6x", color.hex_rgb);
「カラー120aef」と表示されます。私はスウィフト3でそれをやったんかこれは
#define lf_rgb(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]
@interface UIColor (lc_rgb)
- (NSInteger)hex_rgb;
@end
@implementation UIColor (lc_rgb)
- (NSInteger)hex_rgb
{
CGFloat r, g, b, a;
BOOL result = [self getRed:&r green:&g blue:&b alpha:&a];
// log(@"rgba: %f, %f, %f, %f", r * 255, g * 255, b * 255, a * 255);
if ((result == NO) || (a != 1.0f))
return -1;
return
(NSInteger)(r * 255) * 256 * 256 +
(NSInteger)(g * 255) * 256 +
(NSInteger)(b * 255) * 1;
}
@end
:私はhttps://github.com/superarts/LCategoryでこれらのコードを入れます、またはあなたもあなた自身のコードバンクにコピー&ペーストすることができます
extension UIColor {
var hex:String{
get{
var red:CGFloat = 0
var blue:CGFloat = 0
var green:CGFloat = 0
var alpha:CGFloat = 0
self.getRed(&red, green: &green, blue: &blue, alpha: &alpha)
let rgb:Int = (Int)(red*255)<<16 | (Int)(green*255)<<8 | (Int)(blue*255)<<0
return String.localizedStringWithFormat("#%06x", rgb)
}
}
}
またはあなたができますそれを方法にする。私はちょうどがどのように見えるのか、color.hex()
が好きです。
素晴らしいライブラリとして出てきます。これに感謝します。 – fes
問題ありません。それがあなたのために働くことを望みます! – lewiguez