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.

Foi útil?

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()
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top