0

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 的实际绘图框以适应阴影。我希望它以某种方式位于背景中的单独图层上,而不会被剪裁。

4

1 回答 1

0

您可以创建一个模拟阴影的图像并对其进行缩放,这可能是通过为其提供指向任何视图的指针来自动进行的。然后它将自动调整自身并在该视图具有的任何超级视图中定位低于该视图。

这很好用。阴影应该是屏幕大小的 50% 左右,因此平均扩展/压缩几乎是不可见的。如果它的半径很大,您真的无法判断它是否按比例缩放。

于 2010-05-28T16:08:29.023 回答