Попытка получить значение CGColor из свойства приводит к сбою

StackOverflow https://stackoverflow.com/questions/3275419

  •  17-09-2020
  •  | 
  •  

Вопрос

Я пытаюсь установить свойство следующим образом -

-интерфейс:

@property (readwrite, assign) CGColorRef otherBallColor;

- Какой-то метод:

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];

Как только я пытаюсь получить доступ к значению, происходит сбой -

-SomeOtherMethod (в данном случае drawRect):

CGContextSetFillColorWithColor(context, otherBallColor);

Но если в "каком-то методе" я делаю -

CGColorRef ballColor = [UIColor blueColor].CGColor;

...все это работает нормально.Кто-нибудь может объяснить, что происходит?

Большое спасибо (PS, довольно новичок в Objective-C, хотя и не программирую вообще)

Это было полезно?

Решение

Вы должны сохранить возвращенные CGCLOR, ваш [UICOLOR Colorwith ...] создает автоматическое выпущенное экземпляр, поэтому, когда он не имеет возможности (AutoReleded, который я имею в виду), также выпущен соответствующий CGCLOR.

Я бы порекомендовал вам использовать UIColor вместо CGColorref, если я возможно в этом случае.

Другие советы

Поговорим о позднем ответе, но у меня есть альтернативное решение этой конкретной проблемы, с которой я столкнулся некоторое время назад.Я нашел этот вопрос раньше, чем нашел решение, поэтому решил вложить свои два цента.Получается, что UIColor имеет вызываемый метод экземпляра setFill, который устанавливает приемник в качестве текущего цвета заливки контекста.Чтобы вы могли написать:

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);

Я нахожу это более чистым решением, потому что вам не нужно беспокоиться о сохранении или последующем освобождении каких-либо данных. CGColors.На самом деле, вам даже не нужно иметь дело с какими-либо основными командами настройки цвета графической заливки, такими как CGContextSetFillColorWithColor.

Вы можете ознакомиться с - (void)setFill метод более подробно описан в Документация UIColor Apple.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top