Я хочу сделать UIView или UIImageView кругом. Или круг, размер которого я могу изменить с помощью ползунка и цвет с помощью средства выбора.
Как сделать круговой UIView
Ответы (6)
Как упоминалось в некоторых комментариях, @IBDesignable делает это намного проще, поэтому вы можете использовать Interface Builder для настройки вашего округленного UIImageView.
Сначала создайте класс с именем RoundedImageView.swift
и вставьте в него этот код:
import UIKit
@IBDesignable public class RoundedImageView: UIImageView {
override public func layoutSubviews() {
super.layoutSubviews()
//hard-coded this since it's always round
layer.cornerRadius = 0.5 * bounds.size.width
}
}
Выберите UIImageView в InterfaceBuilder и измените класс с UIImageView на пользовательский RoundedImageView:
Установите Clip to Bounds
в true (иначе изображение выйдет за пределы круга):
Теперь он должен округляться прямо здесь, в InterfaceBuilder, что довольно изящно. Обязательно установите одинаковые значения ширины и высоты, иначе он будет иметь форму дирижабля!
По крайней мере, я могу показать вам ярлык для рисования кругов произвольного размера. Не требуется ни OpenGL, ни отрисовка базовой графики.
Импортируйте платформу QuartzCore, чтобы получить доступ к свойству .cornerRadius вашего UIView или UIImageView.
#import <QuartzCore/QuartzCore.h>
Также вручную добавьте его в папку Frameworks вашего проекта.
Добавьте этот метод в свой контроллер представления или туда, где он вам нужен:
-(void)setRoundedView:(UIImageView *)roundedView toDiameter:(float)newSize;
{
CGPoint saveCenter = roundedView.center;
CGRect newFrame = CGRectMake(roundedView.frame.origin.x, roundedView.frame.origin.y, newSize, newSize);
roundedView.frame = newFrame;
roundedView.layer.cornerRadius = newSize / 2.0;
roundedView.center = saveCenter;
}
Чтобы использовать его, просто передайте ему UIImageView и диаметр. В этом примере предполагается, что у вас есть UIImageView с именем "circ", добавленный в качестве подпредставления к вашему представлению. У него должен быть установлен backgroundColor, чтобы вы могли его видеть.
circ.clipsToBounds = YES;
[self setRoundedView:circ toDiameter:100.0];
Он обрабатывает только UIImageViews, но вы можете обобщить его на любой UIView.
ПРИМЕЧАНИЕ. Начиная с iOS 7, clipToBounds должен иметь значение YES.
toDiameter
на 50.0, чтобы представление не увеличивалось больше, чем его первоначальный размер - небольшой полезный совет :)
- person Supertecnoboff; 14.06.2015
Если кто-то ищет эквивалент Swift, ниже приведен ответ (Xcode7.2):
(Чтобы это работало, высота и ширина должны быть равны.)
extension UIView {
func makeCircular() {
self.layer.cornerRadius = min(self.frame.size.height, self.frame.size.width) / 2.0
self.clipsToBounds = true
}
}
let cntr:CGPoint = self.center self.center = cntr
- person Dhaval H. Nena; 31.05.2016
Нет необходимости в графических вызовах. Просто установите угловой радиус равным ширине / 2. Это можно сделать для любого визуального объекта, т.е. UI
элемента.
Аккуратное, чистое и элегантное решение состоит в том, чтобы создать класс с именем RoundedUIView
и выбрать его в качестве пользовательского класса вашего элемента UIView
в Identity Inspector Xcode, как показано на прикрепленном снимке экрана.
import UIKit
@IBDesignable public class RoundedUIView: UIView {
override public func layoutSubviews() {
super.layoutSubviews()
self.layer.cornerRadius = self.frame.width / 2;
self.layer.masksToBounds = true
}
}
Мне нужно было отображать несколько цветных значков на разных экранах на белом фоне, так как само приложение имеет зеленую тему. Поэтому я поместил UIImgeView
поверх RoundedUIView
, чтобы они выглядели так:
Вам нужно сделать прозрачный UIView (альфа цвета фона равна 0), а затем в его drawRect: нарисовать свой круг с помощью вызовов CoreGraphics. Вы также можете отредактировать слой представления и присвоить ему угловой радиус.