検索

ホームページ  >  に質問  >  本文

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

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 再来进行圆角定制,也不现实。况且,性能上也不允许。

所以,我想问问,在这样的情况要求下,还可以使用什么方法来进行圆角定制。如果,你知晓的话,请在闲余之时回复一下,帮我解读解读。
谢谢啦、
迷茫迷茫2771日前650

全員に返信(3)返信します

  • 高洛峰

    高洛峰2017-04-18 09:41:58

    丸い角を描画するには、サイズを指定するか、maskToBounds メソッドを呼び出す必要がありますが、このパフォーマンスが最悪であることは誰もが知っています。

    描画前にフレームを取得し、他の方法を使用してパフォーマンスの問題を最適化する必要があると思います。 (drawRect を書き換えてビュー階層などを削減したり、ツールを使用してボトルネックがどこにあるのかを分析したりするのと同様です

    極端な場合は、フレームのハード計算を直接使用し、自動レイアウトを使用しないでください。

    返事
    0
  • 大家讲道理

    大家讲道理2017-04-18 09:41:58

    私たちのプロジェクトでの処理方法は、内部に角丸レイヤーを持つ UIView を使用し、角丸を必要とするビューとの制約を設定し、この角丸ビューのレイアウトサブビューにベジェ曲線を描画します。

    返事
    0
  • 阿神

    阿神2017-04-18 09:41:58

    実際、角の丸い画像を直接追加するのが最良の方法であり、これにより最高のパフォーマンスが得られます

    返事
    0
  • キャンセル返事