2014-08-28 102 views
0

我想與梯度繪製圓形進度視圖圖像:如何繪製漸變iOS中

Design Image

我嘗試下面的代碼,但結果顏色是不正確的。這是我的代碼:

//draw gradient 

    CGFloat colors [] = { 
     1.0, 0.7, 
     0.2, 0.4 

    }; 

    CGFloat locations[] = { 0.0, 1.0 }; 


    CGColorSpaceRef baseSpace = CGColorSpaceCreateDeviceGray(); // gray colors want gray color space 


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

    CGContextSaveGState(context); 
    CGContextAddPath(context, progressPath); 
    CGContextClip(context); 

    CGRect boundingBox = CGPathGetBoundingBox(progressPath); 
    CGPoint gradientStart = CGPointMake(0.0, CGRectGetMinY(boundingBox)); 
    CGPoint gradientEnd = CGPointMake(1.0, CGRectGetMaxY(boundingBox)); 

    CGContextDrawLinearGradient(context, gradient, gradientStart, gradientEnd, 0); 
    CGGradientRelease(gradient), gradient = NULL; 
    CGContextRestoreGState(context); 

progressPath是與顏色的進度線:

[UIColor colorWithRed:21/255.0f green:182/255.0f blue:217/255.0f alpha:1.0] 

UPDATE:

這是我的代碼所產生的圖像:Result Image 結果圖像不是同樣的設計,顏色是不一樣的。我不知道爲什麼。

請幫我解決這個問題。提前致謝。

+0

糟糕,我的答案假定您想要一個角度漸變,但仔細檢查後,它看起來像圖像實際上使用的是線性漸變。你可以發佈這個代碼生成的圖像的圖像,所以我們可以看到輸出有什麼問題嗎? – 2014-08-28 17:28:14

+0

除了用藍色頂部的alpha通道繪製灰色,還可以嘗試使用從原始圖像中採樣的RGB顏色。根據我的測量,它們應該是RGB(78,95,99)和RGB(139,206,227)。 – 2014-08-29 15:02:57

回答

0

您正在尋找的漸變類型,顏色隨着圍繞中心點的角度而變化,稱爲角度漸變。不幸的是,iOS沒有內置的繪製角度漸變的方式,但您可以使用開源庫(如paiv/AngleGradientLayer)來完成。

+0

我想我使用了錯誤的漸變色。你能幫我麼?謝謝 – user3884889 2014-08-29 03:29:01

0

工作代碼:

- (void) setGradientWithFrame:(CGRect)frame 
{ 
    //create the gradient 
    CAGradientLayer *gradient = [CAGradientLayer layer]; 
    gradient.frame = frame; 
    //this example is white-black gradient, change it to the color you want.. 
    gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor whiteColor] CGColor], (id)[[UIColor blackColor] CGColor], nil]; 
    gradient.cornerRadius = frame.size.height/2.0f; 
    [self.view.layer insertSublayer:gradient atIndex:0]; 

    CALayer *whiteCircle = [CALayer layer]; 
    whiteCircle.frame = CGRectMake(frame.origin.x + 10, frame.origin.y + 10, frame.size.width - 20, frame.size.height - 20); 
    whiteCircle.backgroundColor = [[UIColor whiteColor] CGColor]; 
    whiteCircle.cornerRadius = whiteCircle.frame.size.width/2.0f; 
    [self.view.layer insertSublayer:whiteCircle atIndex:1]; 

    CALayer *whitesquare = [CALayer layer]; 
    whitesquare.frame = CGRectMake(50, frame.size.height - 20, 25, 25); 
    whitesquare.backgroundColor = [[UIColor whiteColor] CGColor]; 
    whitesquare.transform = CATransform3DMakeRotation(-20.0/180.0 * M_PI, 0.0, 0.0, 1.0); 
    [self.view.layer insertSublayer:whitesquare atIndex:2]; 
} 

調用的方法:

[self setGradientWithFrame:CGRectMake(0, 0, 100, 100)]; 

PS。將顏色更改爲所需顏色的梯度顏色:

+0

謝謝,但在我的情況下不起作用。我在drawRect()中繪製它。我更新了我的問題。 PLS。檢查。謝謝 – user3884889 2014-08-29 02:17:21