1

楕円形のボタンを描画する必要があります。画像を楕円形に設定したくありません。

UIBezierPath を使用して別のシェーパーを描画できることを読みましたが、適切な楕円形を描画できません。

これは、円形を作成するために使用しているコードです。

self.layer.borderWidth=1.0;

self.clipsToBounds = YES;
[self setTitleColor:ktextColor forState:UIControlStateNormal];

self.layer.cornerRadius = self.bounds.size.width/2;//half of the width
self.layer.borderColor=[[UIColor whiteColor]CGColor];

どんな助けでも大歓迎です!!

4

4 に答える 4

2

ボタンのレイヤーにデリゲートを設定し、デリゲート メソッド「displayLayer:」を実装できます。

-(void)displayLayer:(CALayer *)layer
{
  UIGraphicsBeginImageContext(layer.frame.size);
  CGContextRef context = UIGraphicsGetCurrentContext();    

  UIBezierPath* ovalPath = [UIBezierPath bezierPathWithOvalInRect: CGRectMake(0.0, 0.0, CGRectGetWidth(layer.frame), CGRectGetHeight(layer.frame))];
  [[UIColor whiteColor] setFill];
  [ovalPath fill];
  [[UIColor blackColor] setStroke];
  ovalPath.lineWidth = 1;
  [ovalPath stroke];

  UIImage *imageBuffer = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();

  layer.contents = (id)[imageBuffer CGImage];
}
于 2013-09-09T06:50:49.833 に答える
1

私はしばらくこれらの 2 つの機能を使用してきましたが、まだ問題は発生していませんが、問題が発生した場合はお知らせください。

UIView のサブクラス (つまり、UIButton、UICollectionViewCell など) であれば何でも渡すことができます。

+ (void)setCornerRadius:(CGFloat)radius forView:(UIView*)view
{
  [view.layer setCornerRadius:radius];
  [view.layer setMasksToBounds:YES];
}

+ (void)setBordersForView:(UIView*)view width:(CGFloat)width color:(UIColor*)color
{
  view.layer.borderColor = color.CGColor;
  view.layer.borderWidth = width;
}

上記により、コレクションビューで以下の効果が得られます。

ここに画像の説明を入力

コレクション ビュー セルには 1 つのボタンがあり、このボタンは端の周り全体にバインドされ (自動レイアウト)、セルの高さと幅全体を占有します。

次に、上記の両方の関数のビュー パラメーターとして、セル全体 (セル内から呼び出す場合は self.viewForBaseLineLayout) を渡します。

半径パラメータについては、20.0f を渡しています。(ただし、この値は、渡すビューのサイズによって異なります。いじってみる必要があります)

私はこの投稿が古いことを知っていますが、新しい人を助けるかもしれません:)

于 2015-07-13T22:03:05.457 に答える
0

OBShapedButton クラスを使用できますここからダウンロード

于 2013-09-09T07:14:55.457 に答える