Попытка получить значение CGColor из свойства приводит к сбою
-
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);
Я нахожу это более чистым решением, потому что вам не нужно беспокоиться о сохранении или последующем освобождении каких-либо данных. CGColor
s.На самом деле, вам даже не нужно иметь дело с какими-либо основными командами настройки цвета графической заливки, такими как CGContextSetFillColorWithColor
.
Вы можете ознакомиться с - (void)setFill
метод более подробно описан в Документация UIColor Apple.