2010-05-13 69 views
0

模仿的CALayer阴影属性一样shadowOffset,shadowRadius,则shadowColor的CALayer的阴影属性不可用在下面3.2的iPhone OS版本,我不知道我怎么会模仿使用该功能与3.1和下面。在iPhone OS 3.2发现OS 3.1

我想要使用它可以以干净的方式将阴影添加到UIViews,以便以某种方式在图层上绘制阴影,而不是通过在视图的-(void)drawRect:(CGRect)rect方法中绘制阴影,该方法需要缩小实际视图框架来适应阴影。 (这种缩小方法已经在我在这里找到的其他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的实际绘图框架以适应阴影。我希望它以某种方式在背景中的一个单独的图层上,而不需要修剪。

回答

0

您可以创建一个模拟阴影的图像,并将其缩放,可能会自动给它一个指向任何视图的指针。然后,它会自动调整自己并将其定位在该视图所具有的任何超视图之下。

这很好用。阴影应该是屏幕大小的50%左右,所以平均扩展/压缩是相当隐蔽的。如果它有一个很大的半径,你真的不知道它是否缩放。