У меня есть метод делегата UIVIew, и в методе drawRect я добавляю UIBezierPath, чтобы показать тень на квадрате.
//// General Declarations
CGContextRef context = UIGraphicsGetCurrentContext();
//// Shadow Declarations
UIColor* shadow = [UIColor blackColor];
CGSize shadowOffset = CGSizeMake(0, -0);
CGFloat shadowBlurRadius = 15;
//// Rectangle Drawing
rectanglePath = [UIBezierPath bezierPathWithRect: CGRectMake(8, 8, 44, 44)];
CGContextSaveGState(context);
CGContextSetShadowWithColor(context, shadowOffset, shadowBlurRadius, shadow.CGColor);
[[UIColor whiteColor] setFill];
[rectanglePath fill];
CGContextRestoreGState(context);
Затем я хочу изменить цвет тени на основе определенных критериев, поэтому я создаю метод makeRed.
- (void)makeRed {
NSLog(@"makeRed");
CGContextRef context = UIGraphicsGetCurrentContext();
// Shadow Declarations
UIColor* shadow = [UIColor redColor];
CGSize shadowOffset = CGSizeMake(0, -0);
CGFloat shadowBlurRadius = 15;
CGContextSaveGState(context);
CGContextSetShadowWithColor(context, shadowOffset, shadowBlurRadius, shadow.CGColor);
[[UIColor whiteColor] setFill];
[rectanglePath fill];
CGContextRestoreGState(context);
}
Но когда я вызываю метод, я получаю сообщение:
: CGContextSaveGState: недопустимый контекст 0x0
есть идеи, как я могу установить правильный контекст или изменить цвет тени по-другому?
Обратите внимание, что начальный рисунок тени работает отлично, так как у делегата есть другие атрибуты, то есть некоторые причудливые анимации, использующие метод .layer для создания теней, не будут работать.
Ваше здоровье