Pergunta

Eu estou a tentar definir uma propriedade como assim

-interface:

@property (readwrite, assign) CGColorRef otherBallColor;

-someMethod:

CGColorRef ballColor = [UIColor colorWithRed:255.0/256.0 green:165.0/256.0 blue:239.0/256.0 alpha:1.0].CGColor;  
[self setOtherBallColor:ballColor];

Assim que eu tentar acessar o valor que ele falha -

-someOtherMethod (drawRect neste caso):

CGContextSetFillColorWithColor(context, otherBallColor);

Mas se no "someMethod" eu não -

CGColorRef ballColor = [UIColor blueColor].CGColor;

...tudo funciona bem.Alguém pode explicar o que está acontecendo?

Muito obrigado (PS, muito novo para objective-C, tho não de programação em geral)

Foi útil?

Solução

Você deve manter devolvidos CGColor, sua [UIColor colorWith...] cria uma auto-lançado instância, portanto, quando ele está fora do escopo (autoreleased eu quero dizer), correspondente CGColor é lançado bem.

Eu recomendo que você use UIColor em vez de CGColorRef se me é possível neste caso.

Outras dicas

Falar sobre um atraso de resposta, mas eu tenho uma solução alternativa para este problema específico, que eu me deparei com um pouco atrás.Achei esta pergunta antes que a solução, então pensei em jogar em meus dois centavos.Acontece que UIColor tem um método de instância chamado setFill, que define o receptor como o atual contexto de cor de preenchimento.Então, você poderia escrever:

CGContextRef myContext = UIGraphicsGetCurrentContext();
[[UIColor colorWithRed:255.0/255.0 green:165.0/255.0 
                  blue:239.0/255.0 alpha:1.0] setFill];
CGContextFillPath(myContext);

Eu acho isso uma solução de limpeza, porque você não tem que preocupar-se sobre a retenção ou, posteriormente, lançar qualquer CGColors.Na verdade, você não vai mesmo ter de lidar com qualquer Núcleo de Gráficos de cor de preenchimento e definição de comandos, como CGContextSetFillColorWithColor.

Você pode verificar para fora do - (void)setFill o método mais detalhadamente no UIColor a documentação da Apple.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top