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 再来进行圆角定制,也不现实。况且,性能上也不允许。
所以,我想问问,在这样的情况要求下,还可以使用什么方法来进行圆角定制。如果,你知晓的话,请在闲余之时回复一下,帮我解读解读。
谢谢啦、
高洛峰2017-04-18 09:41:58
繪製圓角是必須要指定大小的,要嘛就要呼叫maskToBounds方法,不過大家都知道這個效能是最遭的。
我覺得還是應該取得到 frame 之後進行繪製,效能問題用其他方法去優化。 (類似重寫 drawRect 減少視圖層級等,或用instruments分析瓶頸到底在什麼地方
極端情況直接使用 frame 硬算,不使用auto layout。
大家讲道理2017-04-18 09:41:58
我們專案裡的處理方法是使用一個UIView,裡面加上圓角圖層,這個view和需要圓角的view建立約束,在這個圓角view的layoutsubview裡繪製貝塞爾曲線