如何在旋转时处理 UIView 圆角(使用 CAShapeLayer)
Posted
技术标签:
【中文标题】如何在旋转时处理 UIView 圆角(使用 CAShapeLayer)【英文标题】:How to handle UIView rounded corners (using CAShapeLayer) on rotation 【发布时间】:2014-04-27 16:39:07 【问题描述】:我有一个包含 UIView 的 UITableViewCell。当单元格是该部分中的唯一行(即在我的实现中未选择)时,我想将 UIView 的所有角都弄圆。如果选择了单元格,那么我只想围绕 UIView 的顶部两个角。我正在尝试在自定义 tableviewcell 的 layoutSubviews 中执行此操作。
- (void)layoutSubviews
[super layoutSubviews];
self.roundedView.layer.mask = nil;
if (self.sectionSelected)
self.maskLayer = [CAShapeLayer layer];
self.maskLayer.path = [UIBezierPath bezierPathWithRoundedRect:self.roundedView.bounds byRoundingCorners:(UIRectCornerTopLeft|UIRectCornerTopRight) cornerRadii:CGSizeMake(10, 10)].CGPath;
self.roundedView.layer.mask = self.maskLayer;
else
self.maskLayer = [CAShapeLayer layer];
self.maskLayer.path = [UIBezierPath bezierPathWithRoundedRect:self.roundedView.bounds byRoundingCorners:UIRectCornerAllCorners cornerRadii:CGSizeMake(10, 10)].CGPath;
self.roundedView.layer.mask = self.maskLayer;
不幸的是,这种方法并非一直有效。如果我有一个纵向选择的单元格(self.sectionSelected = YES)。然后取消选择(self.sectionSelected = NO)。然后旋转到横向并再次选择单元格。它显示的单元格大小应该是纵向的。所以我相信它仍然在应用纵向图层蒙版,而不是风景图层。如果我将它滚动到视图之外,然后再将其返回,它会更新到适当的宽度。另外值得注意的是,我调用 [self.tableView reloadData];在 didRotateFromInterfaceOrientation 中。
有什么办法可以避免这个问题吗?提前致谢
【问题讨论】:
深入挖掘。似乎 roundedView.bounds 最初返回的是纵向视图的大小,而不是横向。为什么会发生这种情况? 如果您使用 tableView 自己的选择逻辑,可能值得尝试在setSelected:animated:
中执行此操作
【参考方案1】:
只需添加“self.contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth;”即可解决
【讨论】:
以上是关于如何在旋转时处理 UIView 圆角(使用 CAShapeLayer)的主要内容,如果未能解决你的问题,请参考以下文章