具有IBDesignables的单元格中具有角半径的阴影

时间:2017-05-30 10:30:43

标签: ios objective-c

我在单元格中有2个子视图。一个用于阴影视图,另一个用于角半径,因为它听起来是我从this link找到的好方法。所以我尝试在Objective-C中用IBDessignables制作它。如果单元格大小相同但是动态大小的阴影显示在另一个单元格上但是角落视图很好的话,一切正常。

- 查看单元格的层次结构 -

-- UITableViewCell
  -- contentView
     -- shadowView
       -- CornerView

这是影子视图的代码

ShadowView.h

IB_DESIGNABLE
@interface ShadowView : UIView
@property (nonatomic) IBInspectable CGFloat cornerRadius;
@property (nonatomic) IBInspectable CGFloat shadowRadius;
@property (nonatomic) IBInspectable CGSize  shadowOffset;
@end

ShadowView.m

@implementation ShadowView

-(void)setup{
    self.cornerRadius = 5.0f;
    self.shadowRadius = 2.0f;
    self.shadowOffset  = CGSizeMake(0, 0);
    self.backgroundColor = [UIColor clearColor];
}

- (instancetype)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        [self setup];
    }
    return self;
}


- (id)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    if (self) {
        [self setup];
    }
    return self;
}

- (void)drawRect:(CGRect)rect {
    [self updateLayerProperties];
}

- (void)updateLayerProperties {
    self.layer.shadowOffset = self.shadowOffset;
    self.layer.shadowRadius = self.shadowRadius;
    self.layer.shadowOpacity = 0.3;
    self.layer.shadowPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds cornerRadius:self.cornerRadius].CGPath;
    self.layer.masksToBounds = NO;
    self.layer.shouldRasterize = YES;
    self.layer.rasterizationScale = [UIScreen mainScreen].scale;
}

@end

所以有人知道具体问题是什么吗?因为角视图边界工作得很好但不是阴影视图。

演示文件

如果有人想测试它,那么这是演示文件.. https://www.dropbox.com/s/myxjyj5pu3ey3aw/demoDesignables.zip?dl=0

1 个答案:

答案 0 :(得分:2)

视图负责绘制内容,处理多点触控事件以及管理任何子视图的布局。 因此,您需要覆盖layoutSubviews的{​​{1}}功能。

ShadowView