-1
對不起,但我對CGContext
的瞭解相當有限。無法在CGContext中設置填充顏色(CGContextSetFillColorWithColor)
我使用的是接受的答案HERE中的代碼在UIView
中繪製星星。我想要實現的是以2種不同顏色顯示星星(如評分視圖)。問題是,我似乎無法使用CGContextSetFillColorWithColor()
的2種不同顏色。
相關代碼:
if (i < 3) {
NSLog(@"__BLACK__");
CGContextSetFillColorWithColor(context, [UIColor blackColor].CGColor);
CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
} else {
NSLog(@"__RED__");
CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor);
CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
}
全碼:
- (void) drawRect:(CGRect)rect {
int aSize = 20;
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, aSize);
CGFloat xCenter = 15.0;
CGFloat yCenter = 12.5;
float w = 25.0;
double r = w/2.0;
float flip = -1.0;
for (NSUInteger i = 0; i < 5; i++) {
if (i < 3) {
NSLog(@"__BLACK__");
CGContextSetFillColorWithColor(context, [UIColor blackColor].CGColor);
CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
} else {
NSLog(@"__RED__");
CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor);
CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
}
double theta = 2.0 * M_PI * (2.0/5.0); // 144 degrees
CGContextMoveToPoint(context, xCenter, r * flip + yCenter);
for (NSUInteger k = 1; k < 5; k++) {
float x = r * sin(k * theta);
float y = r * cos(k * theta);
CGContextAddLineToPoint(context, x + xCenter, y * flip + yCenter);
}
xCenter += 37.5;
}
CGContextClosePath(context);
CGContextFillPath(context);
}
在編譯和執行我得到的日誌:
__BLACK__
__BLACK__
__BLACK__
__RED__
__RED__
然而,填充顏色似乎不生效,結果是:
我不明白我在做什麼錯在這裏。
外'for'循環會產生5組星星,後面的星星會覆蓋更早的星星(即1個黑星,然後是2個黑星,第一顆星遮住,然後是3個黑星包含2顆黑星的星星,4顆覆蓋3顆黑星的紅星等)。嘗試改變'for(NSUInteger i = 0; i <5; i ++){'to'for(NSUInteger i = 0; i <2; i ++){'你應該看到黑色星星。 – bobnoble 2014-10-22 11:11:14
@bobnoble,你是對的,部分。我*複製了** for **語句,並將其添加到顯示的代碼後面,並添加了我想要的顏色和減少的迭代次數。有效。你應該發佈這個答案,我會接受它。 – n00bProgrammer 2014-10-22 13:45:33