2014-07-09 7 views
2

У меня есть UIView, который имеет разную ширину и высоту {ширина: 45, высота: 37}, когда я попытался сделать его точным кругом, используя cornerRadius его слой, результат не был точным кругом, который я хочу. Разница между шириной и высотой делает это различие? Как получить точный круг с этим размером?Сделать круг UIView, который имеет разную ширину и высоту

Кстати, вот мой код -

myView.layer.cornerRadius = myView.frame.size.width/2.f; 
myView.masksToBounds = YES; 

Я также попытался, myView.layer.cornerRadius = myView.frame.size.width/myView.frame.size.height;

Это не делает трюк! Мое больше исследований об этом, если myView будет иметь такую ​​же ширину и высоту, то myView.layer.cornerRadius = myView.frame.size.width/2.f; будет работать нормально! Но почему-то я не могу сделать его такой же ширины и высоты.

ответ

1

Согласно предложениям @sebastienFCT, я применил эту логику, чтобы получить форму (чуть ближе) для myView.

CGFloat max = MAX(myView.frame.size.width, myView.frame.size.height); 
CGFloat min = MIN(myView.frame.size.width, myView.frame.size.height); 
CGFloat diff = max - min; 
CGFloat borderWidth = max - (diff/2.f); 
myView.frame = CGRectMake(myView.frame.origin.x, myView.frame.origin.y, borderWidth, borderWidth); 
myView.layer.cornerRadius = borderWidth/2.f; 
myView.layer.masksToBounds = YES; 

Я знаю, что это не правильный путь, но сейчас это помогло мне послать первый построить для клиента и сделал мой босс счастливым!

+1

отлично работает, меня тоже радует :) – NAZIK

2

Я не уверен, что это лучший ответ, но я хотел бы попытаться reframe мой взгляд, и затем настроить мой cornerRadius:

CGFloat borderWidth = MAX(myView.frame.size.width, myView.frame.size.height); 
myView.frame = CGRectMake(myView.frame.origin.x, myView.frame.origin.y, borderWidth, borderWidth); 
[myView.layer setCornerRadius:borderWidth/2]; 

Делая такую ​​вещь, вы можете столкнуться проблемами с интерфейсом (width или height вашего вида будет больше и может скрываться от просмотров), поэтому я думаю, что, вероятно, лучше практика.

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