CGContextSetRGBFillColor не работает
Я создаю спрайты из CGImage, который я нарисовал, используя функции CGContext. У меня также есть механизм изменения цвета, реализованный в виде меню. Но хотя я очищаю контекст и меняю цвет, цвет, который используется для рисования, остается прежним. У кого-нибудь есть кто-нибудь, что не так?
CGContextSaveGState(UIGraphicsGetCurrentContext());
UIGraphicsBeginImageContext(CGSizeMake(40, 40));
if ([color isEqualToString:@"black"]) {
CGContextSetRGBFillColor(UIGraphicsGetCurrentContext(), 0,0,0, 1);
}
else if ([color isEqualToString:@"red"]) {
CGContextSetRGBFillColor(UIGraphicsGetCurrentContext(), 1.0,0,0, 1);
}
else if ([color isEqualToString:@"green"]) {
CGContextSetRGBFillColor(UIGraphicsGetCurrentContext(), 0,1.0,0, 1);
}
else if ([color isEqualToString:@"blue"]) {
CGContextSetRGBFillColor(UIGraphicsGetCurrentContext(), 0,0,1.0, 1);
}
CGRect rect1 = CGRectMake(0,0,40,40);
CGContextAddEllipseInRect(UIGraphicsGetCurrentContext(),rect1);
CGContextFillPath(UIGraphicsGetCurrentContext());
UIImage *myImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
CGContextFlush(UIGraphicsGetCurrentContext()) ;
CGContextRestoreGState(UIGraphicsGetCurrentContext());
CCSprite *newSprite = [CCSprite spriteWithCGImage:[myImage CGImage] key:@"blackCircle"];
[itemsArray addObject:newSprite];
[newSprite setPosition:point];
[self addChild:newSprite];
2 ответа
Вы уверены, что ваша цветовая переменная установлена, и что это правильная кодировка строки, чтобы пройти тест isEqualToString? (т.е. вы уверены, что на самом деле нажимаете код, чтобы установить цвет).
Я скопировал ваш код выше, вплоть до создания изображения из контекста, в метод viewDidLoad контроллера представления, а затем добавил изображение в подпредставление представления изображения, и цвет получился правильным.
Это код, который я поместил в метод viewDidLoad контроллера представления - представление закончилось с синим кружком на нем, поэтому кажется, что ваш код должен работать:
CGContextSaveGState(UIGraphicsGetCurrentContext());
UIGraphicsBeginImageContext(CGSizeMake(40, 40));
NSString *color = @"blue";
if ([color isEqualToString:@"black"]) {
CGContextSetRGBFillColor(UIGraphicsGetCurrentContext(), 1,0,0, 1);
}
else if ([color isEqualToString:@"red"]) {
CGContextSetRGBFillColor(UIGraphicsGetCurrentContext(), 1.0,0,0, 1);
}
else if ([color isEqualToString:@"green"]) {
CGContextSetRGBFillColor(UIGraphicsGetCurrentContext(), 0,1.0,0, 1);
}
else if ([color isEqualToString:@"blue"]) {
CGContextSetRGBFillColor(UIGraphicsGetCurrentContext(), 0,0,1.0, 1);
}
CGRect rect1 = CGRectMake(0,0,40,40);
CGContextAddEllipseInRect(UIGraphicsGetCurrentContext(),rect1);
CGContextFillPath(UIGraphicsGetCurrentContext());
UIImage *myImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
CGContextFlush(UIGraphicsGetCurrentContext()) ;
CGContextRestoreGState(UIGraphicsGetCurrentContext());
UIImageView *imgV = [[UIImageView alloc] initWithFrame:CGRectMake(30,30,200,200)];
imgV.image = myImage;
[self.view addSubview:imgV];
Вам нужно добавить параметры кода полного цвета, например, так...
CGContextSetRGBFillColor(UIGraphicsGetCurrentContext(), 1.0/255,0.0/255,0.0/255, 1.0);