【发布时间】:2013-08-07 21:09:21
【问题描述】:
我希望我的 UICollectionViewCells 具有圆角和阴影,但我遇到了一个问题,我似乎只能拥有一个或另一个,但不能同时拥有。
为了绕过角落,我在单元格的初始化中使用了这段代码:
CALayer *layer = [self layer];
[layer setCornerRadius:4];
[layer setRasterizationScale:[[UIScreen mainScreen] scale]];
[layer setShouldRasterize:YES];
要添加阴影,我在单元格的初始化中使用以下代码:
CALayer *layer = [self layer];
[layer setMasksToBounds:NO];
[layer setRasterizationScale:[[UIScreen mainScreen] scale]];
[layer setShouldRasterize:YES];
[layer setShadowColor:[[UIColor blackColor] CGColor]];
[layer setShadowOffset:CGSizeMake(0.0f,0.5f)];
[layer setShadowRadius:8.0f];
[layer setShadowOpacity:0.2f];
[layer setShadowPath:[[UIBezierPath bezierPathWithRoundedRect:self.bounds cornerRadius:layer.cornerRadius] CGPath]];
为了尝试圆角和阴影,我在单元格的初始化中使用了以下代码:
CALayer *layer = [self layer];
[layer setMasksToBounds:NO];
[layer setCornerRadius:4];
[layer setRasterizationScale:[[UIScreen mainScreen] scale]];
[layer setShouldRasterize:YES];
[layer setShadowColor:[[UIColor blackColor] CGColor]];
[layer setShadowOffset:CGSizeMake(0.0f,0.5f)];
[layer setShadowRadius:8.0f];
[layer setShadowOpacity:0.2f];
[layer setShadowPath:[[UIBezierPath bezierPathWithRoundedRect:self.bounds cornerRadius:layer.cornerRadius] CGPath]];
但这只会产生阴影。
这是一个错误还是我做错了什么?
【问题讨论】:
-
我找到了解决办法。我在 Interface Builder 的 UICollectionViewCell 中添加了一个额外的 UIView(bgView),并将单元格的所有内容放入该 bgView 中。我还在单元格中创建了一个属性,并将一个 IBOutlet 连接到 bgView。在单元格的初始化中,我将阴影添加到单元格的图层。然后在我在 collectionView:cellForItemAtIndexPath: 中调用的 configCell 方法中,我将圆角添加到新的 bgView。我还必须确保将 UICollectionViewCell 的背景颜色设置为清晰。这行得通,但我仍然觉得不应该那么复杂。
标签: ios objective-c calayer uicollectionviewcell