滚动时 UIBezierPath 问题的舍入

Posted

技术标签:

【中文标题】滚动时 UIBezierPath 问题的舍入【英文标题】:Rounder by UIBezierPath issue when scrolling 【发布时间】:2016-04-05 08:24:15 【问题描述】:

我是 ios 新手。我正在制作一个聊天应用程序。我正在使用UITableView 显示消息聊天(一个单元格 - 一个消息)。 在每个单元格中,我会在 2,3 或 4 角处将消息四舍五入(如 Facebook 聊天)

对于更圆,我在每个Tableview CelllayoutSubView 中使用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 问题的舍入的主要内容,如果未能解决你的问题,请参考以下文章

java中的舍入双[重复]

将 NSString 转换为 NSNumber 会导致数字过多和奇怪的舍入

二次规划的舍入问题

将浮点数转换为无符号短时的舍入问题

跨元素的舍入固定表格布局单元格宽度百分比计算

BigDecimal的舍入模式