【发布时间】:2011-02-19 02:34:48
【问题描述】:
诸如 shadowOffset、shadowRadius、shadowColor 等 CALayer 阴影属性在 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 的实际绘图框以适应阴影。我希望它以某种方式位于背景中的单独图层上,而不会被剪裁。
【问题讨论】:
标签: uiview calayer dropshadow