3

我有一个UICollectionViewCell子类,我需要圆角并添加阴影。细胞看起来像一张方形卡片,细胞之间有很大的空间。

所以“在”每个单元格的“下面”,我想添加一些阴影。我可以成功地做到这一点,但是我的单元格底部只有圆角。顶部只有正常的角落。我需要所有四个角的圆角。

我在这里找到了解决方案UIViews,建议添加一个单独UIView的 as a subview,但出于性能原因,我宁愿避免这种情况。

我确实找到了一种使用这种方法的解决方案,您可以在下面的代码中找到它:

[UIBezierPath bezierPathWithRoundedRect: cornerRadius:]

但这对我也不起作用。是否有可能它对我不起作用,因为我试图只在单元格底部添加阴影“下方”/?似乎这些答案中的大多数都是针对开发人员想要在整个单元格周围添加阴影的问题提供的。

我想我愿意为subview我的UICollectionViewCell子类添加一个特殊的,但我想把它作为最后的手段。

我的目标iOS 7+和使用Xcode 6.1.1.

这是我在UICollectionViewCell子类中使用的代码,用于尝试实现阴影和圆角:

- (void)load:(CustomUserObject *)customObject
{
    self.customObject = customObject;

    // Round cell corners
    self.layer.cornerRadius = 12;

    // Add shadow
    self.layer.masksToBounds = NO;
    self.layer.shadowOpacity = 0.75f;
    self.layer.shadowRadius = 10.0f;
    self.layer.shouldRasterize = NO;
    self.layer.shadowPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(self.frame.size.width/2 - (self.frame.size.width - 50)/2, self.frame.size.height, self.frame.size.width - 50, 10) cornerRadius:self.layer.cornerRadius].CGPath;

}

编辑:如果我设置self.layer.masksToBoundsNO,阴影有效,但顶角不圆。如果我设置self.layer.masksToBoundsYES,阴影不起作用,但现在所有四个角都是圆角的。我只是不知道如何绕过所有四个角并让阴影起作用。

4

2 回答 2

5

在查看了 Timothy Moose 好心在评论中分享的示例项目后,我意识到我所做的一切几乎都和他一模一样。

出于沮丧,我重新访问了我的牢房nib文件,它终于击中了我。我UIView在单元格的顶部添加了一个。此视图用作彩色横幅,也用作另一个UIImageViewUILabel.

顶部UICollectionViewCell成功地圆了顶角,但您永远不会知道,因为彩色UIView位于单元格的顶部,并且与单元格一样宽。

愚蠢的错误,很多时候都是小事。

这是我用来实现四个圆角和UICollectionViewCell. 是隐藏单元格顶角self.banner的额外内容:UIView

- (void)load:(CustomUserObject *)customObject
{
    self.customObject = customObject;

    // Round the banner's corners
    UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.banner.bounds
                                                   byRoundingCorners:(UIRectCornerTopLeft | UIRectCornerTopRight)
                                                         cornerRadii:CGSizeMake(10, 10)];

    CAShapeLayer *maskLayer = [CAShapeLayer layer];
    maskLayer.frame = self.banner.bounds;
    maskLayer.path = maskPath.CGPath;
    self.banner.layer.mask = maskLayer;

    // Round cell corners
    self.layer.cornerRadius = 10;

    // Add shadow
    self.layer.masksToBounds = NO;
    self.layer.shadowOpacity = 0.75f;
    self.layer.shadowRadius = 10.0f;
    self.layer.shouldRasterize = NO;
    self.layer.shadowPath = [UIBezierPath bezierPathWithRect:CGRectMake(self.frame.size.width/2 - (self.frame.size.width - 50)/2, self.frame.size.height, self.frame.size.width - 50, 10)].CGPath;

}
于 2015-01-13T22:47:09.673 回答
0
func dropShadow() {
    self.layer.masksToBounds = false
    self.layer.shadowColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.25).cgColor
    self.layer.shadowOpacity = 0.5
    self.layer.shadowOffset = CGSize(width: 0.0, height: 2.0)
    self.layer.shadowRadius = 4.0
    self.layer.cornerRadius = 5.0
}

//要使用阴影

cell.dropShadow()

于 2017-11-14T09:50:13.380 回答