滚动时 UIBezierPath 问题的舍入
Posted
技术标签:
【中文标题】滚动时 UIBezierPath 问题的舍入【英文标题】:Rounder by UIBezierPath issue when scrolling 【发布时间】:2016-04-05 08:24:15 【问题描述】:我是 ios 新手。我正在制作一个聊天应用程序。我正在使用UITableView
显示消息聊天(一个单元格 - 一个消息)。
在每个单元格中,我会在 2,3 或 4 角处将消息四舍五入(如 Facebook 聊天)
对于更圆,我在每个Tableview Cell
的layoutSubView
中使用UIBezierPath
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.messageView.bounds byRoundingCorners:(UIRectCornerTopLeft | UIRectCornerBottomLeft) cornerRadii:CGSizeMake(3.0, 3.0)];
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
maskLayer.frame = self.bounds;
maskLayer.path = maskPath.CGPath;
self.messageView.layer.mask = maskLayer;
问题是,当布局第一次初始化时,一切正常,但是当我滚动某些单元格时出现错误的舍入器(我发现问题是有时滚动 self.messageView.bounds
返回错误的值所以@ 987654330@画错角)但我不知道为什么
我怎样才能防止它发生?
或者我是否可以在没有UIBezierPath
的情况下使用另一种方法来舍入视图(我谷歌但我只找到一种舍入 UIView 的方法是使用 UIBezierPath
:()?
任何帮助将不胜感激
【问题讨论】:
试试这个代码 [v.layer setCornerRadius:30.0f]; // 边框 [v.layer setBorderColor:[UIColor lightGrayColor].CGColor]; [v.layer setBorderWidth:1.5f]; // 投影 [v.layer setShadowColor:[UIColor blackColor].CGColor]; [v.layer setShadowOpacity:0.8]; [v.layer setShadowRadius:3.0]; [v.layer setShadowOffset:CGSizeMake(2.0, 2.0)]; @DarjiJigar 我的要求是rounder the message in 2,3 or 4 corner
,你的代码只在4个角落变圆
检查一下***.com/questions/4847163/round-two-corners-in-uiview,但我猜(你也是这么说的)这个问题不是在绘图上而是在获得正确的边界上,所以我会专注于修复它而不是避免使用贝塞尔路径
@Injectios 谢谢。但在您给定的链接中,接受答案是 5 年前,另一个新答案是使用 UIBezierPath
就像我的代码一样
【参考方案1】:
我遇到了类似的问题,并通过将我的圆角代码移动到 tableView:willDisplayCell:forRowAtIndexPath
中来解决它这将允许 Cocoa 正确调整大小。
【讨论】:
【参考方案2】:我有一个类似的问题,并通过在 layoutSubviews() 中移动代码来解决它
override func layoutSubviews()
DispatchQueue.main.async
self.maskLayer.path = UIBezierPath(roundedRect: self.messageBGView.bounds, byRoundingCorners: [.topLeft, .topRight,.bottomLeft], cornerRadii: CGSize(width: 20, height: 20)).cgPath
self.messageBGView.layer.mask = self.maskLayer
self.messageBGView.layer.masksToBounds = true
【讨论】:
以上是关于滚动时 UIBezierPath 问题的舍入的主要内容,如果未能解决你的问题,请参考以下文章