iOS:请问如何在使用Masnory进行自动布局的情况下进行视图的圆角定制、

 mobiledu2502871343 发布于 2022-10-28 06:22

1.我选择定制圆角的方法是,利用UIBezierPath对象拿到路径,然后赋值给CAShapeLayer对象,最后利用视图的图层mask属性进行圆角定制。

UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:button.bounds
                                               byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight
                                                     cornerRadii:CGSizeMake(12, 12)];
                                                     
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];

maskLayer.frame = button.bounds;

maskLayer.path = maskPath.CGPath;

button.layer.mask = maskLayer;

2.使用Masnory进行布局,拿不到frame,所以上面的代码就因此无效。

3.我要定制的圆角是 UITableView 对象中的 heardView 和 cell,而且 两个视图的大小是自适应的,另外随着数据源的更新不同,这样的圆角的定制情况也会有所不同。那么这种情况下,使用 - setNeedsUpdateConstraints、- layoutIfNeeded 等方法拿到frame 再来进行圆角定制,也不现实。况且,性能上也不允许。

所以,我想问问,在这样的情况要求下,还可以使用什么方法来进行圆角定制。如果,你知晓的话,请在闲余之时回复一下,帮我解读解读。
谢谢啦、
3 个回答
  • 其实最好的办法就是直接给他们加一个圆角的图片,性能最好

    2022-10-29 12:35 回答
  • 我们项目里的处理方法是使用一个UIView,里面加上圆角图层,这个view和需要圆角的view建立约束,在这个圆角view的layoutsubview里绘制贝塞尔曲线

    2022-10-29 12:36 回答
  • 绘制圆角是必须要指定大小的,要么就要调用maskToBounds方法,不过大家都知道这个性能是最遭的。

    我觉得还是应该获取到 frame 之后进行绘制,性能问题用其他方法去优化。(类似重写 drawRect 减少视图层级等,或者用instruments分析瓶颈到底在什么地方

    极端情况直接使用 frame 硬算,不使用auto layout。

    2022-10-29 12:38 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有