Domanda

Come posso disegnare un pulsante con quarzo che ha esattamente lo stesso stile come un UIBarButtonItem. Il pulsante dovrebbe essere in grado di mostrare diversi colori. Ho scaricato il progetto Three20, ma questo progetto è molto complesso, avresti bisogno di un sacco di tempo a trascurare l'intero quadro. Voglio solo disegnare un'UIBarButtonItem personalizzato.

Grazie per l'aiuto.

È stato utile?

Soluzione

Se si utilizza la libreria Three20, immagino stile "ToolBarButton" di TTButton è ciò che si desidera. TTButton è una sotto-classe di UIButton, ma consente di applicare stili proprio come con i CSS, mentre la creazione di una pagina web.

Per creare un pulsante come un UIBarButtonItem, basta chiamare

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

Potrebbe essere necessario conservarlo dal momento che il pulsante è un oggetto di auto-release.

Altri suggerimenti

Provare un'UISegmentedControl con un solo segmento e la selezione momentanea. Supporta tintColor e potrebbe essere abbastanza vicino per i vostri scopi.

In Swift 4.1

È possibile aggiungere la tua visualizzazione personalizzata con i propri disegni / animazioni / colori / etc che utilizzano Quartz2D come segue.

  • Crea la visualizzazione personalizzata con le tue cose al quarzo personalizzato
  • Aggiungi la tua UIBarButtonItem con un CustomView
  • Aggiungi un protocollo (ne avrete bisogno, perché l'UIBarButtonItem inizializzato uno spirito CustomView si aspetta che il fine di gestire le interazioni degli utenti e, quindi, non fornisce un modo per impostare un obiettivo / selettore)
  

La voce pulsante bar creato da questo metodo non chiama l'azione   Metodo del suo obiettivo in risposta alle interazioni con l'utente. Invece, il   elemento pulsante della barra si aspetta che la visualizzazione personalizzata specificata per gestire qualsiasi utente   interazioni e di fornire una risposta adeguata.

Non dimenticare di aggiungere che la visualizzazione deve conformarsi al protocollo (CameraButtonDelegate in questo caso) e anche per aggiungere il metodo cameraButtonChanged(to:) di catturare le interazioni degli utenti

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()
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top