Я пытаюсь добавить тень к своему UIView, но в моем методе drawRect я получаю EXC_BAD_ACCESS.(Я использую ARC)
-(void) drawRect:(CGRect)rect {
CGColorRef lightColor = [UIColor colorWithRed:105.0f/255.0f green:179.0f/255.0f blue:216.0f/255.0f alpha:0.8].CGColor;
CGColorRef shadowColor = [UIColor colorWithRed:0.2 green:0.2 blue:0.2 alpha:0.4].CGColor;
CGContextRef context = UIGraphicsGetCurrentContext();
// Draw shadow
CGContextSaveGState(context);
CGContextSetShadowWithColor(context, CGSizeMake(-5, 0), 10, shadowColor);
CGContextSetFillColorWithColor(context, lightColor);
CGContextFillRect(context, _coloredBoxRect);
CGContextRestoreGState(context);
}
Сообщение об ошибке: Поток 1: Программа получила сигнал: "EXC_BAD_ACCESS".
Строка: CGContextSetFillColorWithColor(context, lightColor);
Когда я изменяю эту строку на:
[[UIColor colorWithRed:105.0f/255.0f green:179.0f/255.0f blue:216.0f/255.0f alpha:0.8] setFill];
Я получаю ту же ошибку, но в этой строке:
CGContextSetShadowWithColor(context, CGSizeMake(-5, 0), 10, shadowColor);
Обновление Я наконец решил проблему, изменив:
CGColorRef shadowColor = [UIColor colorWithRed: 0,2 зеленый: 0,2 синий: 0,2 альфа: 0,4] .CGColor;
до
поплавковые компоненты [4] = {0, 0, 0, 1.0 / 3.0};CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB ();CGColorRef shadowColor = CGColorCreate (colorSpace, компоненты);
Возможный (рабочий) код:
-(void) drawRect:(CGRect)rect
{
float components[4] = {0, 0, 0, 1.0/3.0};
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGColorRef shadowColor = CGColorCreate( colorSpace, components);
CGContextRef context = UIGraphicsGetCurrentContext();
// Draw shadow
CGContextSaveGState(context);
CGContextSetShadowWithColor(context, CGSizeMake(-5, 0), 10, shadowColor);
CGContextSetFillColorWithColor(context, lightColor);
[[UIColor colorWithRed:105.0f/255.0f green:179.0f/255.0f blue:216.0f/255.0f alpha:0.8] setFill];
CGContextRestoreGState(context);
}