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);
Другие вопросы по тегам