2014-11-04 3 views
1

Я пытаюсь сделать форму стрелки. Я понимаю, что это будет сделано с помощью метода CGRect, но можете ли вы дать полный пример того, как это будет сделано в SWIFT?Как изменить форму UIButton в Swift?

+0

Вы хотите нарисовать треугольник в UIView, или вы хотите, чтобы пользовательская форма с некоторым текстом внутри? – JMFR

+0

Пользовательская форма с текстом внутри. Я думал, что это будет обычным классом UIButton, который я могу повторно использовать. – TPCO

+0

Самый простой способ сделать это, вероятно, будет использовать UIButton, как вы предложили. Устанавливая шрифт снизу вверх, установите UIButton.currentImage как изображение треугольника. (Или вы можете пойти хардкорным способом ... Создал подкласс UIView, нарисуйте там треугольник с CoreGraphics, затем установите текст внутри треугольника, используя drawInRect.) Пример CG и Text [здесь] (https: // github. com/regnerjr/BNRSolutions/blob/master/Hypnosister/Hypnosister3/HypnoView.swift) – JMFR

ответ

3

Это может быть сделано программным путем путем первого подкласса UIButton и переопределения drawRect внутри него, чтобы сформировать форму стрелки через траектории безье. Затем просто установите заголовок кнопки таким, какой вы хотите, чтобы ваш текст был, и поместите его соответственно в форму, которую вы нарисовали.

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

Хороший инструмент для рисования сложных безьевых дорожек - paintCode. Я использую пробную версию и могу довольно легко создавать такие формы сейчас.

+0

хорошо один. Я сделал стрелку в paintCode и применил ее к пользовательскому классу UILabel, и это работает, только проблема в том, что он не показывает текст, который я установил для метки в Interface Builder. – TPCO

+0

Трудно точно сказать, почему это происходит, не видя кода. Убедитесь, что все правильно связано, так как это может быть проблемой. Однако вам может быть проще просто установить программный код labeltext. Это можно сделать как labelname.text = "текст здесь" – Glynbeard

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