2011-10-27 9 views
10

ラウンドのRect UIButtonほど良い見ていない:カスタムボタンフレームは、私は次のようにカスタムボタンの枠を描画しようとしている

UIBezierPath *stroke = [UIBezierPath bezierPathWithRoundedRect:self.bounds 
                cornerRadius:RECT_CORNECR_RADIUS]; 

[stroke stroke]; 

しかし、いくつかの理由でコーナー曲線は側面よりも思想家を見て。 UIButtonのデフォルトフレームを見ると、非常に統一されています。 AはUIButton、Bはカスタムボタンです。

どのように私はUIButtonのようにすることができます任意のアイデア。

A is a UIButton, B is a custom button

答えて

25

あなたはボタンの境界を撫でています。これは、線の太さの半分が境界の外にあり、描画されないように、線の端を中心にして線を描画します。これがコーナーで全厚さの理由です。あなたの境界の矩形(線の太さの半分だけ挿入)とそのストロークの矩形にCGRectInsetを使用してください。

+0

これだけです!今はすべて意味があります。私はCGRectInset(self.bounds、1、1)を行い、すべてが完璧に機能しました。ありがとう! – Nikolozi

+0

おかげさまで、挿入図を追加する前に、破線の丸い矩形の角にフレアストロークを得ていましたが、これで解決しました。 – thomh

0

あなたが持っている問題は、おそらくアンチエイリアス処理によるものです。 BeizerPathを描画する前に、CoreGraphicsのアンチエイリアス設定を変更することができます。

ボタンのCALayerとそのcornerRadiusプロパティを使用すると簡単に解決できます。もちろん

self.layer.cornerRadius = RECT_CORNER_RADIUS; 
self.layer.borderWidth = 1.0f; 
self.layer.borderColor = [UIColor blackColor].CGColor; 

を仕事にQuartzCoreフレームワークをインポートし、このためにそのヘッダをインポートすることを忘れないでください:self、カスタムボタンの場合は丸みを帯びたコーナー

を描画するために容易になるだろう(#import)

関連する問題