Uiview 模拟iPhone OS 3.2 for OS 3.1中的CALayer阴影属性

Uiview 模拟iPhone OS 3.2 for OS 3.1中的CALayer阴影属性,uiview,calayer,dropshadow,Uiview,Calayer,Dropshadow,CALayer阴影属性(如shadowOffset、shadowRadius和shadowColor)在3.2以下的iPhone操作系统版本中不可用,我想知道如何在3.1及以下版本中模拟该功能 我想使用它来以一种干净的方式向UIViews添加放置阴影,以便以某种方式在层级别绘制阴影,而不是通过在视图的-(void)drawRect:(CGRect)rect方法中绘制阴影,该方法需要收缩实际视图帧以适应阴影。(我在这里找到的其他UIView drop shadow相关问题中也提出了这种缩小方法)

CALayer阴影属性(如shadowOffset、shadowRadius和shadowColor)在3.2以下的iPhone操作系统版本中不可用,我想知道如何在3.1及以下版本中模拟该功能

我想使用它来以一种干净的方式向UIViews添加放置阴影,以便以某种方式在层级别绘制阴影,而不是通过在视图的
-(void)drawRect:(CGRect)rect
方法中绘制阴影,该方法需要收缩实际视图帧以适应阴影。(我在这里找到的其他UIView drop shadow相关问题中也提出了这种缩小方法)

我在想分层方法会更干净。例如,我尝试创建子类化CALayer,在其中添加了一个单独的阴影层作为子层,但该阴影层将绘制在UIView的drawRect:方法中绘制的任何内容之上,该方法将主层作为背景层

我还尝试实现了子类CALayer's drawInContext:类似这样的东西

- (void)drawInContext:(CGContextRef)ctx {
// code to draw shadow for a frame the size of the layer's frame        
[super drawInContext:ctx];
}
但是,阴影仍然被剪裁到上下文的当前剪裁边界框中,这似乎是层本身的帧

我还想将主层的绘图重定向到一个子层,该子层将放置在另一个子层之上,该子层上绘制了阴影。然后,我可能会摆脱剪辑和阴影将是最远的距离。但我无法真正理解我将如何做到这一点,而且这并不是一个干净的方法


你有什么想法吗?只是想弄清楚我的UIView drop shadow相关问题与我在这里找到的其他问题有何不同;我不想收缩UIView的实际画框以容纳阴影。我希望它以某种方式位于背景中的一个单独的层上,而不被剪裁。

您可以创建一个模拟阴影的图像,并对其进行缩放,可能会自动为其提供指向任何视图的指针。然后,它会自动调整自身,并在该视图所具有的任何superview中位于该视图下方

这很有效。阴影应该是屏幕大小的50%,所以平均的扩展/压缩是不可见的。如果它有一个大半径,你真的不知道它是否缩放