2

UIButton に境界線を設定し、角を丸くしたいのは片側のみです

私はこのコードを使用します:

//set rounded corners on top
UIBezierPath *maskPath =  [UIBezierPath bezierPathWithRoundedRect:self.scanButton.bounds byRoundingCorners:(UIRectCornerTopLeft | UIRectCornerTopRight) cornerRadii:CGSizeMake(10.0, 10.0)];

CAShapeLayer *maskLayer = [CAShapeLayer layer];
maskLayer.frame = self.scanButton.bounds;
maskLayer.path = maskPath.CGPath;

self.scanButton.layer.mask = maskLayer;

// set border
self.scanButton.layer.borderColor = [UIColor blackColor].CGColor;
self.scanButton.layer.borderWidth = 2.0f;
[self.scanButton.layer setMasksToBounds:YES];

ここに画像の説明を入力

上隅に適切な境界線を作成するにはどうすればよいですか?

4

3 に答える 3

7

スウィフト 2.0 バージョン

UIView 自体でビューの背景色を設定した可能性があるため、境界線の角がクリッピングされています。これを行うより良い方法は、塗りつぶしの色をレイヤーに直接設定することです。これは次のように実行できます。

let button = ... // your existing UIButton
let borderLayer = CAShapeLayer()
borderLayer.strokeColor = UIColor.blackColor().CGColor
borderLayer.fillColor = UIColor.yellowColor().CGColor
borderLayer.borderWidth = 2.0

let borderPath = UIBezierPath(roundedRect: button.bounds,
    byRoundingCorners: [.TopLeft, .TopRight],
    cornerRadii: CGSize(width:10.0, height: 10.0))
    borderLayer.path = borderPath.CGPath

button.layer.insertSublayer(borderLayer, atIndex: 0)

上記により、角が切り取られずに次の結果が得られます。

例のボタン

ボタンの各コーナーに境界線の半径を個別に設定できるこのメソッドを使用してUIButton サブクラスをまとめました

于 2015-10-20T11:30:18.490 に答える
2

カスタム描画で UIButton をサブクラス化し、 drawRect: をオーバーライドする方がよいでしょう。CGContext を実装し、UIBezierPath を追加してストロークする必要があります。最初にCGPathにする必要があるかどうかは思い出せませんが、そうは思いません。

于 2013-10-07T17:14:21.650 に答える
1

次の回答を見てください- iOS でマスクされた CALayer をストロークする彼は、マスクとシェイプレイヤーの組み合わせを使用して、そのようなカスタム境界線を描画します。マスクされたレイヤーの通常の境界線をオフにする必要があります。

于 2013-10-07T21:49:46.897 に答える