2016-07-04 6 views
0

У меня есть UIButton, и я хотел бы получить доступ к UIImageView своего фонового изображения, чтобы я мог сделать изображение круговым. Я знаю, что могу повлиять на сам образ, но я бы предпочел сделать это более элегантно. Я также знаю, что могу использовать свойство button.currentBackgroundImage, чтобы получить UIImage в фоновом режиме, но я хочу сам вид. Как только у меня появится представление, я намереваюсь использовать этот код:Доступ к UIImageView фонового изображения UIButton

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 было 46, когда должно было быть 100. Поэтому я попробовал этот код вместо:

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

И который произвел эту форму:

enter image description here

И на этот раз, то cornerRadius был быть установлен на 65. Так что на самом деле кажется, что моя проблема в том, что я не имею правильную ширину в данный момент , Какую собственность я должен получить, чтобы получить правильный номер?

+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

Предполагая, что вы назвали что-то вроде:

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

в viewDidLoad или ранее, вы можете вызвать следующее viewDidAppear:

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; 
} 

, но это не более элегантно, как упорядочение подтаблицы является деталь реализации UIButton и может измениться в любое время.

+0

Похоже, что UIButton на самом деле не имеет подземелий:/ – multitaskPro

+0

Я обнаружил, что subviews были добавлены только viewDidAppear, но еще не присутствовали в режиме viewDidLoad. Это может зависеть от того, когда сначала задано фоновое изображение. –

Смежные вопросы