Ответы:
Вы можете установить свойства границы в CALayer, открыв свойство layer кнопки.
Сначала добавьте кварц
#import <QuartzCore/QuartzCore.h>
Установить свойства:
myButton.layer.borderWidth = 2.0f;
myButton.layer.borderColor = [UIColor greenColor].CGColor;
Видеть:
https://developer.apple.com/documentation/quartzcore/calayer#//apple_ref/occ/cl/CALayer
CALayer по ссылке выше позволяет вам установить другие свойства, такие как радиус радиуса, maskToBounds и т. Д.
Также хорошая статья о кнопке веселья:
https://web.archive.org/web/20161221132308/http://www.apptite.be/tutorial_custom_uibuttons.php
CGColor
Это очень просто, просто добавьте заголовок quartzCore в свой файл (для этого вы должны добавить каркас кварца в свой проект)
а затем сделать это
[[button layer] setCornerRadius:8.0f];
[[button layer] setMasksToBounds:YES];
[[button layer] setBorderWidth:1.0f];
Вы можете изменить значения с плавающей запятой по мере необходимости.
наслаждаться.
Вот типичный современный код ...
self.buttonTag.layer.borderWidth = 1.0f;
self.buttonCancel.layer.borderWidth = 1.0f;
self.buttonTag.layer.borderColor = [UIColor blueColor].CGColor;
self.buttonCancel.layer.borderColor = [UIColor blueColor].CGColor;
self.buttonTag.layer.cornerRadius = 4.0f;
self.buttonCancel.layer.cornerRadius = 4.0f;
это похоже на сегментированные элементы управления.
ОБНОВЛЕНИЕ для Swift:
Просто сделать:
button.layer.cornerRadius = 8.0
button.layer.borderWidth = 1.0
button.layer.borderColor = UIColor.black.cgColor
И в быстрых, вам не нужно импортировать "QuartzCore / QuartzCore.h"
Просто используйте:
button.layer.borderWidth = 0.8
button.layer.borderColor = (UIColor( red: 0.5, green: 0.5, blue:0, alpha: 1.0 )).cgColor
или
button.layer.borderWidth = 0.8
button.layer.borderColor = UIColor.grayColor().cgColor
Проблема в настройке слоя borderWidth
и borderColor
состоит в том, что когда вы касаетесь кнопки, граница не оживляет эффект выделения.
Конечно, вы можете наблюдать за событиями кнопки и соответственно менять цвет границы, но это не нужно.
Другой вариант - создать растягиваемый UIImage и установить его в качестве фонового изображения кнопки. Вы можете создать набор изображений в вашем Images.xcassets следующим образом:
Затем вы устанавливаете его как фоновое изображение кнопки:
Если ваше изображение является шаблоном изображения, вы можете установить оттенок цвета кнопки, и граница изменится:
Теперь граница будет выделена с остальной частью кнопки при прикосновении.
borderWidth
.
Вот обновленная версия ( Swift 3.0.1 ) из ответа Бена Паккарда .
import UIKit
@IBDesignable class BorderedButton: UIButton {
@IBInspectable var borderColor: UIColor? {
didSet {
if let bColor = borderColor {
self.layer.borderColor = bColor.cgColor
}
}
}
@IBInspectable var borderWidth: CGFloat = 0 {
didSet {
self.layer.borderWidth = borderWidth
}
}
override var isHighlighted: Bool {
didSet {
guard let currentBorderColor = borderColor else {
return
}
let fadedColor = currentBorderColor.withAlphaComponent(0.2).cgColor
if isHighlighted {
layer.borderColor = fadedColor
} else {
self.layer.borderColor = currentBorderColor.cgColor
let animation = CABasicAnimation(keyPath: "borderColor")
animation.fromValue = fadedColor
animation.toValue = currentBorderColor.cgColor
animation.duration = 0.4
self.layer.add(animation, forKey: "")
}
}
}
}
В результате кнопка может быть использована внутри раскадровки , благодаря применению @IBDesignable
и @IBInspectable
тегов.
Также определены два свойства, позволяющие установить ширину и цвет границы непосредственно в конструкторе интерфейса и предварительно просмотреть результат.
Другие свойства могут быть добавлены аналогичным образом для радиуса границы и времени затухания выделения.
prepareForInterfaceBuilder
только из IB, а не при запуске приложения. Так что также установите UIEdgeInsets awakeFromNib
, тогда он будет отображаться и при запуске приложения.
Вам не нужно импортировать QuartzCore.h
сейчас. Беру iOS 8 sdk и Xcode 6.1 в ссылке.
Непосредственно используйте:
[[myButton layer] setBorderWidth:2.0f];
[[myButton layer] setBorderColor:[UIColor greenColor].CGColor];
Вот UIButton
подкласс, который поддерживает выделенную анимацию состояния без использования изображений. Он также обновляет цвет границы при изменении режима оттенка вида.
class BorderedButton: UIButton {
override init(frame: CGRect) {
super.init(frame: frame)
layer.borderColor = tintColor.CGColor
layer.borderWidth = 1
layer.cornerRadius = 5
contentEdgeInsets = UIEdgeInsets(top: 5, left: 10, bottom: 5, right: 10)
}
required init?(coder aDecoder: NSCoder) {
fatalError("NSCoding not supported")
}
override func tintColorDidChange() {
super.tintColorDidChange()
layer.borderColor = tintColor.CGColor
}
override var highlighted: Bool {
didSet {
let fadedColor = tintColor.colorWithAlphaComponent(0.2).CGColor
if highlighted {
layer.borderColor = fadedColor
} else {
layer.borderColor = tintColor.CGColor
let animation = CABasicAnimation(keyPath: "borderColor")
animation.fromValue = fadedColor
animation.toValue = tintColor.CGColor
animation.duration = 0.4
layer.addAnimation(animation, forKey: "")
}
}
}
}
Использование:
let button = BorderedButton(style: .System) //style .System is important
Внешность:
Это может быть достигнуто различными способами в Swift 3.0. Работает на последней версии Август - 2017
Опция 1:
Непосредственно назначьте значения свойства borderWidth для кнопки пользовательского интерфейса:
btnUserButtonName.layer.borderWidth = 1.0
Установить заголовок со значениями цвета по умолчанию для кнопки пользовательского интерфейса:
btnUserButtonName.setTitleColor(UIColor.darkGray, for: .normal)
Установите границу с цветом по умолчанию для значений свойств границы для кнопки пользовательского интерфейса:
btnUserButtonName.layer.borderColor = UIColor.red
Установите пользовательский цвет для значений свойств границы для кнопки пользовательского интерфейса:
let myGrayColor = UIColor(red: 0.889415, green: 0.889436, blue:0.889424, alpha: 1.0 )
btnUserButtonName.layer.borderColor = myGrayColor.cgColor
Вариант 2: [Рекомендуется]
Используйте метод Extension, чтобы Button во всем приложении выглядела согласованно и не нужно было повторять несколько строк кода где угодно.
//Create an extension class in any of the swift file
extension UIButton {
func setBordersSettings() {
let c1GreenColor = (UIColor(red: -0.108958, green: 0.714926, blue: 0.758113, alpha: 1.0))
self.layer.borderWidth = 1.0
self.layer.cornerRadius = 5.0
self.layer.borderColor = c1GreenColor.cgColor
self.setTitleColor(c1GreenColor, for: .normal)
self.layer.masksToBounds = true
}
}
Использование в коде:
//use the method and call whever the border has to be applied
btnUserButtonName.setBordersSettings()
Вывод метода расширения Кнопка:
Обновление со Swift 3
button.layer.borderWidth = 0.8
button.layer.borderColor = UIColor.blue.cgColor
**** В Свифт 3 ****
Создать границу
btnName.layer.borderWidth = 1
btnName.layer.borderColor = UIColor.black.cgColor
Сделать угол закругленным
btnName.layer.cornerRadius = 5
Swift 5
button.layer.borderWidth = 2
Для изменения цвета рамки используйте
button.layer.borderColor = CGColor(srgbRed: 255/255, green: 126/255, blue: 121/255, alpha: 1)