SORU
22 Temmuz 2012, Pazar


UİColor Biraz daha açık ve Koyu Renk olsun

Bir Gradyan herhangi bir UİColor edebilmeli bakıyordum. Bunu yapmak niyetindeyim yolu Çekirdek Grafikleri degrade çizmek için kullanmaktır. Yapmaya çalıştığım bir renk elde etmek için, şöyle diyelim:

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

ve birkaç ton koyu ve birkaç ton daha hafif olan bir UİColor. Herkes bunu nasıl biliyor mu? Teşekkür ederim.

CEVAP
22 Temmuz 2012, Pazar


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

Bu gibi kullanabilirsiniz:

UIColor *baseColor = // however you obtain your color
UIColor *lighterColor = [self lighterColorForColor:baseColor];
UIColor *darkerColor = [self darkerColorForColor:baseColor];

EDİT: @Anchu Chimala belirttiği gibi, maksimum esneklik için, bu yöntemler UİColor bir kategori olarak uygulanmalıdır. Ayrıca, @Riley fikir, renk yapmak için iyi bir fikir olabilir proprtionally veya sabit değerler çıkartılacak yerine daha Karanlık veya aydınlık. @Jrturton belirttiği gibi, gerekli RGB bileşenleri işlemek için değil, daha iyi parlaklık özelliği kendini değiştirmek. Tüm:

@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

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • alex maybury

    alex maybury

    20 Aralık 2007
  • Doc Adams

    Doc Adams

    20 HAZİRAN 2007
  • Tahir Jahi

    Tahir Jahi

    6 Mart 2006