Пользовательский UIBarButtonItem с кварцем - PullRequest
4 голосов
/ 13 февраля 2010

Как нарисовать кнопку с кварцем, которая имеет точно такой же стиль, как и UIBarButtonItem. Кнопка должна отображать разные цвета. Я скачал проект Three20, но этот проект действительно сложный, вам нужно много времени, чтобы пропустить весь фреймворк. Я просто хочу нарисовать пользовательский UIBarButtonItem.

Спасибо за помощь.

Ответы [ 3 ]

1 голос
/ 06 марта 2010

Попробуйте UISegmentedControl только с одним сегментом и мгновенным выбором. Он поддерживает tintColor и может быть достаточно близко для ваших целей.

0 голосов
/ 23 июля 2018

In Swift 4.1

Вы можете добавить свой собственный вид с вашими собственными дизайнами / анимацией / цветами / и т. Д., Используя Quartz2D, следующим образом.

  • Создайте свой собственный вид с помощью пользовательских кварцевых элементов
  • Добавьте ваш UIBarButtonItem с настраиваемым видом
  • Добавить протокол (он вам понадобится, потому что UIBarButtonItem, инициализированный с настраиваемым представлением, ожидает, что представление будет обрабатывать взаимодействия с пользователем, и, следовательно, не обеспечивает способ установки цели / селектора)

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

Не забудьте добавить, что ваше представление должно соответствовать протоколу (CameraButtonDelegate в данном случае), а также добавить метод cameraButtonChanged(to:) для захвата пользовательских взаимодействий

func setupButton() {
   customView = CameraButton()
   customView.frame = CGRect(x: 0, y: 0, width: 25, height: 25)
   customView.delegate = self
   let barButtonItem = UIBarButtonItem(customView:customView)
   self.navigationItem.rightBarButtonItem = torchItem
}

protocol CameraButtonDelegate {
    func cameraButtonChanged(to state:Bool)
}
class CameraButton: UIView {
    var delegate: CameraButtonDelegate?
    var active: Bool = false    
    var strokeColor = UIColor.gray
    init() {
        self.init()
        self.backgroundColor = .clear
    }
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.active = self.active ? false : true
        self.strokeColor = self.active ? UIColor.blue : UIColor.gray
        setNeedsDisplay()
    }
    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.delegate?.cameraButtonChanged(to: self.active)
    }
    override func draw(_ rect: CGRect) {
        let context = UIGraphicsGetCurrentContext()
        context?.setStrokeColor(strokeColor.cgColor)
        context?.setLineWidth(1.0)
        // Add your Quartz stuff here
        context?.strokePath()
    }
}
0 голосов
/ 15 марта 2010

Если вы используете библиотеку Three20, я думаю, что стиль "toolbarButton" TTButton - это то, что вам нужно. TTButton является подклассом UIButton, но он позволяет применять стили, как при использовании css при создании веб-страницы.

Чтобы создать кнопку наподобие UIBarButtonItem, просто наберите

[TTButton buttonWithStyle:@"toolbarButton:" title:@"Title"]

Возможно, вам придется сохранить его, поскольку кнопка является объектом автоматического разблокирования.

...