【问题标题】:How to create shadow effect in uitableviewcell?如何在uitableviewcell中创建阴影效果?
【发布时间】:2011-11-12 21:00:24
【问题描述】:

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

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

【问题讨论】:

    标签: iphone uitableview shadow


    【解决方案1】:

    您可以参考以下链接了解 uitableview 中的阴影效果,这将对您有所帮助

    try this

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

    myView.layer

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

    myView.layer.shadowOffset
    
    myView.layer.shadowRadius
    

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

    【讨论】:

    • 正如我已经提到的那样,这对我没有帮助
    • 我知道所有这些事情。但我要说的是,我无法按照显示的图像制作阴影。
    【解决方案2】:

    每个部分是否总是相同的大小?如果是这样,为什么不将 UITableViewCell 子类化以绘制包含投影的类似笔记本的项目?

    您还可以在 UITableView 上添加一个透明的 UIImageView 以获取暗角。

    编辑:

    这个效果有点棘手,你要看看如何使用 UIBezierPaths (http://developer.apple.com/library/IOS/#documentation/UIKit/Reference/UIBezierPath_class/Reference/Reference .html)。

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

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

    这里有一些代码可以帮助您入门:

        // 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];
        }
    

    代码不是完全拖放,您仍然需要添加白线,修复一些大小,并将最后一个单元格和阴影调整到恰到好处。但这应该足以让您入门。

    干杯!

    【讨论】:

    • 这里每个部分的大小是不一样的。它也是不同的和动态的。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 链接不存在。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-06
      • 1970-01-01
      相关资源
      最近更新 更多