如何在iOS中的tableview单元格中添加下拉阴影

如何在iOS中的tableview单元格中添加下拉阴影,ios,objective-c,uitableview,calayer,Ios,Objective C,Uitableview,Calayer,如图所示,可以使用以下类型的代码添加下拉阴影: self.layer.shadowOffset = CGSizeMake(0, 1); self.layer.shadowRadius = 1; self.layer.shadowOpacity = 0.3; 但这不能用硬件加速,所以渲染需要很长时间,在tableview中使用时,需要重新绘制每个单元格,速度会慢很多 解决了这个问题,有人知道一种方法可以顺利完成吗 我找到了解决问题的方法,它更像是一种变通方法,但对我来说效果很好。我创建了自定义类

如图所示,可以使用以下类型的代码添加下拉阴影:

self.layer.shadowOffset = CGSizeMake(0, 1);
self.layer.shadowRadius = 1;
self.layer.shadowOpacity = 0.3;
但这不能用硬件加速,所以渲染需要很长时间,在tableview中使用时,需要重新绘制每个单元格,速度会慢很多


解决了这个问题,有人知道一种方法可以顺利完成吗

我找到了解决问题的方法,它更像是一种变通方法,但对我来说效果很好。我创建了自定义类ShadowVIew,它对任何UIView进行了正确的设置,并在其下方添加了一个暗透明视图,使其看起来像阴影:

代码如下:

影景

#import "ShadowView.h"

@interface ShadowView()

@property (nonatomic) UIView * shadow;

@end

@implementation ShadowView

-(id)initWithCoder:(NSCoder *)aDecoder{

    if ((self = [super initWithCoder:aDecoder])) {
        self.layer.masksToBounds = NO;
        self.layer.cornerRadius = 8; // if you like rounded corners
    }
    return self;

}

-(void)layoutSubviews{
    [super layoutSubviews];

    if (self.shadow.superview == nil) {
        UIView * parent = self.superview;
        self.shadow = [[UIView alloc] initWithFrame:self.frame];
        self.shadow.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.3];
        CGRect frame = self.shadow.frame;
        frame.origin.y+=1;
        frame.origin.x-=1;
        frame.size.width+=2;
        self.shadow.frame = frame;
        self.shadow.layer.masksToBounds = NO;
        self.shadow.layer.cornerRadius = 8;

        [parent insertSubview:self.shadow atIndex:0];
        }


@end
记住,这不是一个完美的解决方案,但是对于快速实现来说效果很好。如果您的视图不经常加载,您可以简单地添加quartz绘制的阴影,因此不会影响应用程序的性能

self.layer.shadowOffset = CGSizeMake(0, 1);
self.layer.shadowRadius = 1;
self.layer.shadowOpacity = 0.3;
希望对某人有所帮助:)