CALayer 阴影属性(如 shadowOffset、shadowRadius、shadowColor)在 3.2 以下的 iPhone OS 版本中不可用,我想知道如何模仿该功能以用于 3.1 及以下版本。
我想用它来以一种干净的方式向 UIViews 添加阴影,以便以某种方式在图层级别绘制阴影,而不是通过在视图的-(void)drawRect:(CGRect)rect
方法中绘制它,这需要缩小实际视图框架以适应阴影。(我在 SO 上找到的其他 UIView 阴影相关问题中已经提出了这种缩小方法)。
我在想分层的方法会更干净。例如,我尝试创建子类化 CALayer,向其中添加了一个单独的阴影层作为子层,但随后将绘制在 UIView 的 drawRect: 方法中绘制的任何内容之上,该方法将主层作为支持层。
我也尝试过实现子类 CALayer 的 drawInContext: 类似这样的东西,
- (void)drawInContext:(CGContextRef)ctx {
// code to draw shadow for a frame the size of the layer's frame
[super drawInContext:ctx];
}
但是随后阴影仍然被裁剪到上下文的当前裁剪边界框,这似乎是图层自己的框架。
我也有一些想法,将主图层的绘图重定向到一个子图层,该子图层将放置在另一个已绘制阴影的子图层之上。然后我可能会摆脱剪辑,阴影会最远。但我无法真正理解我将如何做到这一点,而且这并不是一个干净的方法。
关于如何解决这个问题的任何想法?只是为了弄清楚我的 UIView 阴影相关问题与我在 SO 上找到的其他问题有何不同;我不想缩小 UIView 的实际绘图框以适应阴影。我希望它以某种方式位于背景中的单独图层上,而不会被剪裁。