Я хотел бы добавить тень к UIImageView, который имеет слои изображения.
Я пробовал маршрут self.layer.shadowOffset / shadowOpacity, но он слишком медленный ..
Когда я хочу добавить тень, я вызываю метод addShadowLayerWithOffset, ниже которого я ожидал вызвать drawRect и добавить тень ..
Но drawRect не вызывается.
Что мне здесь не хватает?
- (void)drawRect:(CGRect)rect
{
SYSLOG(LOG_DEBUG, "in drawRect, isShadowed: %d", isShadowed);
if (isShadowed == true)
{
CGContextRef currentContext = UIGraphicsGetCurrentContext();
CGContextSaveGState(currentContext);
CGContextSetShadow(currentContext, CGSizeMake(100, 100), 3);
[super drawRect: rect];
CGContextRestoreGState(currentContext);
}
else
[super drawRect: rect];
}
- (void) addShadowLayerWithOffset: (int)offset
{
// self.layer.shadowOffset = CGSizeMake(offset,offset);
// self.layer.shadowOpacity = 0.7f;
// self.layer.shadowRadius = 5.0;
isShadowed = true;
[self setNeedsDisplay];
}
хорошо, я получил вызов drawLayer.
Мне нужно было [self.layer setNeedsDisplay], а не [self.layer setNeedsPlay], где self - это подкласс UIImageView.
Но тень не рисуется, фактически само изображение (исходный слой) также не отображается.
Что я должен изменить?
- (void) drawLayer: (CALayer*) layer inContext: (CGContextRef)context
{
SYSLOG(LOG_DEBUG, "in drawLayer, isShadowed: %d", isShadowed);
if(isShadowed == true)
{
CGContextSaveGState(context);
CGContextSetShadow(context, CGSizeMake(10, 10), 3);
[super drawLayer: layer inContext: context];
CGContextRestoreGState(context);
}
else
[super drawLayer: layer inContext: context];
}