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

  • HER0R

    HER0R

    16 Aralık 2007
  • iMasterful

    iMasterful

    11 EYLÜL 2009
  • makemebad35

    makemebad35

    17 NİSAN 2006