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) 메소드를 호출해야 하는데 이 성능이 최악인 것은 모두가 알고 있는 사실입니다.
그림을 그리기 전에 프레임을 확보하고 다른 방법을 사용하여 성능 문제를 최적화해야 한다고 생각합니다. (뷰 계층 등을 줄이기 위해 drawRect를 다시 작성하거나 도구를 사용하여 병목 현상이 발생한 위치를 분석하는 것과 유사합니다
극단적인 경우에는 프레임 하드 계산을 직접 사용하고 자동 레이아웃을 사용하지 마세요.
大家讲道理2017-04-18 09:41:58
우리 프로젝트의 처리 방법은 내부에 둥근 모서리 레이어가 있는 UIView를 사용하는 것입니다. 이 뷰는 둥근 모서리가 필요한 뷰에 대한 제약 조건을 설정하고 이 둥근 모서리 뷰의 레이아웃 하위 뷰에 베지어 곡선을 그립니다.