2010-06-06 28 views
36

bir rengi düz bir renkle doldurmak yeterince kolaydır:DrawRect degrade ile bir yol nasıl doldurulur?

CGPoint aPoint; 
for (id pointValue in points) 
{ 
    aPoint = [pointValue CGPointValue]; 
    CGContextAddLineToPoint(context, aPoint.x, aPoint.y); 
} 
[[UIColor redColor] setFill]; 
[[UIColor blackColor] setStroke]; 
CGContextDrawPath(context, kCGPathFillStroke); 

Katı kırmızı yerine bir degrade çizmek isterdim ama sorun yaşıyorum. Soru/Cevapta listelenen kodu denedim: Gradients on UIView and UILabels On iPhone

CAGradientLayer *gradient = [CAGradientLayer layer]; 
[gradient setFrame:rect]; 
[gradient setColors:[NSArray arrayWithObjects:(id)[[UIColor blueColor] CGColor], 
       (id)[[UIColor whiteColor] CGColor], nil]]; 
[[self layer] setMasksToBounds:YES]; 

[[self layer] insertSublayer:gradient atIndex:0]; 

Bununla birlikte, bu, orijinal görünümümüzü kaplayan degrade ile bu görünümün tüm görünümünü boyar. .

cevap

89

Ben doldurmak istediğiniz yolu klibi ve CGContextDrawLinearGradient kullanmak. İşte drawRect'in basit bir uygulaması: örnek olarak:

- (void) drawRect:(CGRect)rect 
{ 
    // Create a gradient from white to red 
    CGFloat colors [] = { 
     1.0, 1.0, 1.0, 1.0, 
     1.0, 0.0, 0.0, 1.0 
    }; 

    CGColorSpaceRef baseSpace = CGColorSpaceCreateDeviceRGB(); 
    CGGradientRef gradient = CGGradientCreateWithColorComponents(baseSpace, colors, NULL, 2); 
    CGColorSpaceRelease(baseSpace), baseSpace = NULL; 

    CGContextRef context = UIGraphicsGetCurrentContext(); 

    CGContextSaveGState(context); 
    CGContextAddEllipseInRect(context, rect); 
    CGContextClip(context); 

    CGPoint startPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMinY(rect)); 
    CGPoint endPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMaxY(rect)); 

    CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, 0); 
    CGGradientRelease(gradient), gradient = NULL; 

    CGContextRestoreGState(context); 

    CGContextAddEllipseInRect(context, rect); 
    CGContextDrawPath(context, kCGPathStroke); 
} 
+1

Size müthiş bir rozet verebilirsem yaparım! CGContextSaveGState ile ilgili herhangi bir eğiticiden haberiniz var mı? Çünkü elma sınıfı referansı zayıftır. – Derrick

+0

Derrick: http://developer.apple.com/mac/library/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_overview/dq_overview.html#//apple_ref/doc/: Kuvars 2D Programlama Kılavuzu, o bir şeyi birlikte kapakları uid/TP30001066-CH202-TPXREF132 –

+1

Örnek kodunuzu kullandıktan sonra gölgem kayboldu. Ben gölge çizgisini taşındıktan denedim; gstate geri befroe önce ondan sonra, ondan sonra, kaydetmek gstate önce ("CGContextSetShadow (bağlam, CGSizeMake (5.0, -5.0), 4)") ve kırpma sonrası - şey yardım etti. Doldurmak kez inme – Doron