如何在uitableviewcell中创建阴影效果?

时间:2011-09-08 10:22:51

标签: iphone uitableview shadow

我正在开发一个应用程序,我想创建类似于底部uitableviewcell下图所示的阴影效果。

enter image description here

我该怎么做?任何教程或示例代码?我查了http://cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.htmlhttp://www.touchthatfruit.com/?tag=uitableview 和其他一些。但他们在uitableview底部有相同高度的影子。如何 在包含日期(而不是整个tableview)的每个部分的边框边处添加阴影。我可以在底部创建下拉阴影。但是每个部分的最后一个uitableview单元格的边框怎么样。还有一种方法是创建图像并设置它作为tableviewcell的背景。但是如何调整图像的大小并且它看起来是否正确,因为每个部分都有动态的条目数。一个部分只有1个条目,其他部分可能包含15个或更多条目。(这里的图像是整个部分,包含日期).i可以只有每个部分的最后一个tableviewcell的单独图像。这是我知道的。但有没有更好的方法或以编程方式进行?

4 个答案:

答案 0 :(得分:0)

您可以在uitableview中参考以下链接获取阴影效果,以帮助您

try this

视图的一个基本部分是它的层是CALayer。您可以通过视图的图层属性访问它:

myView.layer

在文档中,CALayers有几个控制阴影的属性。您应该能够告诉导航栏的图层投射阴影。与您想要投射阴影的任何其他内容的图层一起。

myView.layer.shadowOffset

myView.layer.shadowRadius

您需要确保将QuartzCore框架添加到项目中以访问此属性

答案 1 :(得分:0)

每个部分的尺寸总是一样吗?如果是这样,你为什么不将UITableViewCell子类化为包含投影的笔记本项目?

您还可以在UITableView上添加透明的UIImageView以获得黑暗的角落。

编辑:

这种效果有点棘手,您将要了解如何使用UIBezierPaths(http://developer.apple.com/library/IOS/#documentation/UIKit/Reference/UIBezierPath_class/Reference/Reference html的)。

顶部可以是图像(环和标签效果)。然后,您可以在drawRect函数中绘制其余单元格。 (这比在UITableViewCell中使用层中的阴影属性更有效。)

您需要覆盖UITableViewCell类并实现自定义drawRect:function。

以下是一些可以帮助您入门的代码:

    // Only override drawRect: if you perform custom drawing.
    // An empty implementation adversely affects performance during animation.
    - (void)drawRect:(CGRect)rect
    {

        /* Draw top image here */

        //now draw the background of the cell.
        UIBezierPath *path1 = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0, 320, 50)];
        [[UIColor grayColor] set];
        [path1 fill];

        UIBezierPath *path2 = [UIBezierPath bezierPathWithRect:CGRectMake(0, 52, 320, 50)];
        [[UIColor whiteColor] set];
        [path2 fill];

        UIBezierPath *path3 = [UIBezierPath bezierPathWithRect:CGRectMake(0, 104, 320, 50)];
        [[UIColor grayColor] set];
        [path3 fill];

        UIBezierPath *path4 = [UIBezierPath bezierPathWithRect:CGRectMake(0, 156, 320, 50)];
        [[UIColor whiteColor] set];
        [path4 fill];

        //and so on...

        //Let's draw the shadow behind the last portion of the cell.
        UIBezierPath *shadow = [UIBezierPath bezierPathWithRect:CGRectMake(0, 208, 320, 52)];
        [[UIColor darkGrayColor] set];
        [shadow fill];

        //Finally, here's the last cell with a curved bottom
        UIBezierPath *path5 = [UIBezierPath bezierPath];
        [path5 moveToPoint:CGPointMake(0, 208)];
        [path5 addLineToPoint:CGPointMake(320, 208)];
        [path5 addLineToPoint:CGPointMake(320, 258)];
        [path5 addCurveToPoint:CGPointMake(0, 258) controlPoint1:CGPointMake(160, 254) controlPoint2:CGPointMake(160, 254)];
        [[UIColor grayColor] set];
        [path5 fill];
    }

代码不是很拖放,你仍然需要添加白线,修复一些尺寸,并调整最后一个单元格和阴影才恰到好处。但它应该足以让你开始。

干杯!

答案 2 :(得分:0)

看一下我的answer类似的问题,这可能是您问题的可能解决方案!通过改变阴影路径,您应该能够实现所需的阴影效果!

答案 3 :(得分:-1)

这可以使用bezierpath实现:检查URL以获取各种阴影效果:http://nachbaur.com/blog/fun-shadow-effects-using-custom-calayer-shadowpaths