私の目標は、カスタムのUIButton
サブクラスを作成し、いくつかの追加機能を備えた丸い(または丸い四角形の)ボタンを作成することです。 、限りカスタムdrawRectでラウンドUIButtonを作成する:
@implementation MyRoundButton
-(id)initWithFrame:(CGRect)frame{
if (self = [super initWithFrame:frame])
[self setupView];
return self;
}
-(id)initWithCoder:(NSCoder *)aDecoder{
if(self = [super initWithCoder:aDecoder])
[self setupView];
return self;
}
-(void)setupView {
self.layer.cornerRadius = MIN(self.frame.size.height, self.frame.size.width)/2.0;
}
これはに正常に動作します:
は、いくつかの検索の後、私は単純にボタン層のcornerRadius
を設定すると丸いボタンを作成する最も簡単な方法であることがわかりました私はもちろんdrawRect:
- (void)drawRect:(CGRect)rect {
[super drawRect:rect];
}
をオーバーライドしないように私はにいくつかのカスタム描画コードを追加したいと思いますしかし、[super drawRect:rect]
ボタンだけがもう丸められていなくても、その範囲内で矩形で描かれます。
これはどのように可能ですか?シンプルなスーパーコールでメソッドをオーバーライドすると、ビヘイビアがまったく変わることはありますか?
どうすればこの問題を回避できますか?私はすでにレイヤーを変更せずに、単に手動で背景を描画するようにしました。drawRect:
です。しかし、ボタンはバックグラウンドの矩形を描画し、カスタム図面はその上に表示されます。
これはどのように解決するのですか?
を参照してください。 drawRectを使用してそれ自体を実装する必要はありません。 –
これは説明かもしれませんが、そのような実装の理由は何でしょうか?何も変わらないコードは何か変わる?非常に奇妙な...しかし、実際の問題は何か他のものです: 'drawRect:'を使う丸いボタンを作る方法 –
なぜ[[super drawRect:rect]; '? – DonMag