Как мне нарисовать пользовательский интерфейс UIView, который буквально представляет собой просто мяч (2D-круг)? Мог бы я просто переопределить метод drawRect? А может кто-нибудь подскажет код рисования синего круга?
Кроме того, можно ли изменить рамку этого представления в самом классе? Или мне нужно сменить фрейм из другого класса?
(просто пытаюсь заставить мяч подпрыгивать)
Да:
В идеале нет, но можно.
Я позволю родителям контролировать это.
источник
CGContextSetFillColorWithColor(ctx, self.colorOfCircle.CGColor);
, метод, предложенный в решении,CGColorGetComponents
работает только с некоторыми цветами, см. stackoverflow.com/questions/9238743/…rect
этого я случайно использовалself.frame
для эллипса. Правильное значениеself.bounds
. D'о! :)Вот еще один способ, используя UIBezierPath (возможно, уже слишком поздно ^^). Создайте круг и замаскируйте им UIView, как показано ниже:
источник
layerClass
метод класса, чтобы сделать его слоем формы.Мой вклад с расширением Swift:
Просто позвони
myView.asCircle()
источник
masksToBounds
true и использованиеself
являются необязательными в этом ответе, но это все еще самое короткое и лучшее решениеSwift 3 - кастомный класс, легко использовать повторно. Он использует
backgroundColor
набор в UI Builderисточник
Swift 3 класс:
источник
Другой способ приблизиться к рисованию круга (и других фигур) - использовать маски. Вы рисуете круги или другие формы, во-первых, создавая маски нужных вам форм, во-вторых, создавая квадраты своего цвета и, в-третьих, применяя маски к этим квадратам цвета. Вы можете изменить маску или цвет, чтобы получить новый собственный круг или другую форму.
Вот результат выполнения кода выше:
источник
Есть еще одна альтернатива для ленивых. Вы можете установить
layer.cornerRadius
ключевой путь для вашего представления в Интерфейсном Разработчике . Например, если у вашего представления ширина = высота 48 , установитеlayer.cornerRadius = 24
:Однако это работает только в том случае, если у вас есть статический размер представления,
(width/height is fixed)
и он не показывает круг в построителе интерфейса.источник
Swift 3 - Xcode 8.1
источник