Uibarbuttonitem personalizado com quartzo
-
20-09-2019 - |
Pergunta
Como posso desenhar um botão com quartzo que tenha exatamente o mesmo estilo que um uibarbuttoniTem. O botão deve poder mostrar cores diferentes. Eu baixei o projeto Three20, mas esse projeto é realmente complexo, você precisaria de muito tempo para ignorar toda a estrutura. Eu só quero desenhar um Uibarbuttonitem personalizado.
Obrigado pela ajuda.
Solução
Se você estiver usando a biblioteca três20, acho que o estilo "ToolBarbutton" do TTButton é o que você deseja. O TTButton é uma subclasse de UIBUItton, mas permite que você aplique estilos como o uso do CSS enquanto cria uma página da web.
Para criar um botão como um uibarbuttonitem, basta ligar
[TTButton buttonWithStyle:@"toolbarButton:" title:@"Title"]
Pode ser necessário retê-lo, pois o botão é um objeto de liberação automática.
Outras dicas
Experimente um controlador de meiogmento com apenas um segmento e seleção momentânea. Ele suporta o TINTCOLOR e pode estar próximo o suficiente para seus propósitos.
Em Swift 4.1
Você pode adicionar sua própria visualização personalizada com seus próprios designs/animações/cores/etc usando o Quartz2D da seguinte forma.
- Crie sua visão personalizada com suas coisas de quartzo personalizadas
- Adicione seu uibarbuttoniTem com uma View CustomView
- Adicione um protocolo (você precisará dele, porque o Uibarbuttonitem inicializado com um CustomView espera que a visualização lide com as interações do usuário e, portanto, não fornece uma maneira de definir um alvo/seletor)
O item do botão de barra criado por esse método não chama o método de ação de seu destino em resposta às interações do usuário. Em vez disso, o item do botão de barra espera que a visualização personalizada especificada lide com qualquer interação do usuário e forneça uma resposta apropriada.
Não se esqueça de acrescentar que sua visão deve estar em conformidade com o protocolo (CameraButtonDelegate
neste caso) e também para adicionar o método cameraButtonChanged(to:)
Para capturar as interações do usuário
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()
}
}