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

  • CNNMoney

    CNNMoney

    16 Kasım 2006
  • Cristina Landa

    Cristina Lan

    28 Ocak 2010
  • Video Copilot

    Video Copilo

    21 EYLÜL 2006