2010-10-10 16 views
8

Bu çalışma kodu var: onlar sadece iyi çalışır, gösterildiği gibiCGGradient'im neden önceden ayarlanmış bir UIColor ile çalışmıyor?

NSMutableArray *shadowColors = [NSMutableArray arrayWithCapacity:2]; 
    color = [UIColor colorWithRed:0 green:0 blue:0 alpha:1]; // Declaration using components 
    [shadowColors addObject:(id)[color CGColor]]; 
    color = [UIColor colorWithRed:1 green:1 blue:1 alpha:0.0]; // Declaration using components 
    [shadowColors addObject:(id)[color CGColor]]; 

    CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB(); 
    CGGradientRef gradient = CGGradientCreateWithColors(space, (CFArrayRef)shadowColors, NULL); 
    CGColorSpaceRelease(space); 

    CGFloat sw = 10.0; // shadow width 

    CGPoint top1 = CGPointMake(x, y+width/2.0); 
    CGPoint top2 = CGPointMake(x + sw, y+width/2.0); 

    CGPoint side1 = CGPointMake(x+width/2.0, y); 
    CGPoint side2 = CGPointMake(x+width/2.0, y+sw); 

    CGContextDrawLinearGradient(c, gradient, top1, top2, 0); 
    CGContextDrawLinearGradient(c, gradient, side1, side2, 0); 
    CGGradientRelease(gradient); 

renk beyanlar ilgilendiğim parçasıdır, hat 2 ve 4. Onları bildirdiğinizde, ama şu ikisini değiştirirseniz [UIColor blackColor] ve [UIColor clearColor] eşdeğeriyle (en azından düşündüm) çizgilerdeyim ve sonra geçişlerim kaybolur. Kullandığım renkler hiçbir fark yaratmıyor, greenColor ve redColor'u kullanabilirim ve hala çalışmıyorlar.

Bir şeyi özlüyor muyum, yoksa bu Apple'ın çerçevelerindeki bir hata mı?


değil çalışır o kodu. Ve bu sadece ilk bölüm, her şey aynı.

NSMutableArray *shadowColors = [NSMutableArray arrayWithCapacity:2]; 
    color = [UIColor blackColor]; 
    [shadowColors addObject:(id)[color CGColor]]; 
    color = [UIColor clearColor]; 
    [shadowColors addObject:(id)[color CGColor]]; 
+0

* Tam olarak * kodunuzun nasıl görünmediğini gösterir misiniz? Not: Neden id’ye bir şey atıyorsun? Bu mantıklı değil. – Eiko

+0

Kimlik için döküm, 'uyumsuz işaretçi türünden gelen bir bağımsız değişken iletme' uyarısı ile kaybolur. – kubi

+0

oh ve sorumu çalışmayan kodla güncelledim. – kubi

cevap

1

kod bana iyi göründü. blackColor ve clearColor büyük olasılıkla beyaz renk alanı içinde, ancak belgelerin CGGradientCreateWithColors renklerin geçirdiğiniz renk alanına dönüştüreceğini söylüyor, bu önemli değil.

Düşünebildiğim tek şey, renk alanı için renk geçişi için NULL'u geçmeyi denemek olurdu; bu da degradenin renkleri Cihaz RGB'si yerine Genel RGB'ye dönüştürmesini sağlar. Bu işe yarayabilir, ancak bir fark yaratmamalı - görebildiğim kadarıyla, her iki şekilde de çalışmalı.

filing a bug'u öneririm.

İlgili konular