CGContextSetRGBFillColor не работает - PullRequest
       22

CGContextSetRGBFillColor не работает

1 голос
/ 25 сентября 2011

Я создаю спрайты из 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 ]

0 голосов
/ 21 мая 2013

Вам необходимо добавить параметры кода полного цвета, например, так ...

CGContextSetRGBFillColor(UIGraphicsGetCurrentContext(), 1.0/255,0.0/255,0.0/255, 1.0);
0 голосов
/ 25 сентября 2011

Вы уверены, что ваша цветовая переменная установлена, и что это правильное кодирование строки, чтобы пройти тест 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];
...