2016-07-04 18 views
0

私はUIButtonを持っています。私はその画像を円形にするために背景画像のUIImageViewにアクセスしたいと思います。私はイメージ自体に影響を与えることができることを知っていますが、私はこれをもっとエレガントにすることを好むでしょう。私はまた、button.currentBackgroundImageプロパティを使用してUIImageをバックグラウンドで取得できることも知っていますが、私はビュー自体が必要です。ビューを取得したら、このコードを使用します:UIButtonの背景画像のUIImageViewにアクセス

buttonImageView.layer.cornerRadius = buttonImageView.frame.size.width/2; 
buttonImageView.clipsToBounds = YES; 

buttonImageViewにはどのようにアクセスできますか?

EDIT: ため@ vhristoskovの提案に、私はこのコードでボタン自体をトリミングしようとした:

self.button.layer.cornerRadius = self.button.frame.size.width/2; 
self.button.clipsToBounds = YES; 

そしてそれは、この形状作られた:私はことを発見し、デバッグした後

enter image description here

をframe.size.widthは100だったはずの46だったので、代わりにこのコードを試しました:

self.button.layer.cornerRadius = self.button.currentBackgroundImage.size.width/2; 
self.button.clipsToBounds = YES; 

そしてそれは、この形状生成:

enter image description here

そして、cornerRadiusが65に設定されていた今回だから、実際に私の問題は、私は、現時点で正しい幅を持っていないということであるように思えます。正しい番号を取得するには、どのプロパティにアクセスすればよいですか?

if (self.myButton.subviews.count > 0 && [self.myButton.subviews[0] isKindOfClass:[UIImageView class]]) { 
    UIImageView *imageView = self.myButton.subviews[0]; 
    imageView.layer.cornerRadius = imageView.frame.size.width/2; 
    imageView.clipsToBounds = YES; 
} 

が、サブビューの順序があるとして、それは、よりエレガントではありません。

[self.myButton setBackgroundImage:[UIImage imageNamed:@"image"] forState:UIControlStateNormal]; 
のviewDidLoadで

以前、あなたはその後、viewDidAppearで次のように呼び出すことができます:あなたが何かを呼ばれることを想定すると、

+0

あなたのUIButtonに直接同じコードを適用しない理由はありますか? – vhristoskov

+0

@vhristoskov hmmm私はちょうどそれを試み、私は奇妙な結果を得た、イメージは奇妙な形をしていた。あなたが望むなら、私の質問に起こったことのスクリーンショットを追加することができます。 – multitaskPro

+0

これは素晴らしいでしょう。また、IB(またはボタンのフレームを設定するために使用したコード)に制約の画像を追加することもできます。 – vhristoskov

答えて

0

私が推測したように、あなたがすでに見つけたように、問題はボタンサイズにあります。実行時のボタンのサイズが期待どおりであることを確認するには、制約を確認します。下の例では、ボタンは垂直方向と水平方向の中央に位置し、幅と高さが固定されています。

Button Constraints

制約:

enter image description here

あなたはbutton.width == button.heightを持っている必要があり完全な円形のボタンを持っています。この条件が満たされた場合、あなたのコードは、魔法のように動作するはずです:

self.button.layer.cornerRadius = CGRectGetWidth(self.button.frame)/2; 
self.button.clipsToBounds = YES; 

enter image description here

+0

私の問題はviewDidLoadでボタンの幅を取得しようとしていたことが判明し、明らかに幅はviewDidAppearでのみ有効です。とにかく私の解決策の要点が含まれているので、私はこの回答を受け入れるつもりです。すべての助けをありがとう:) – multitaskPro

0

UIButtonの実装の詳細はいつでも変更できます。

+0

UIButtonは実際にはサブビューを持たないようです:/ – multitaskPro

+0

私は、サブビューがviewDidAppearによってのみ追加されたが、viewDidLoad時にはまだ存在していないことを発見しました。背景画像が最初に設定される時期に依存することがあります。 –