NSButton con larghezza variabile dimensioni, angoli arrotondati
Domanda
Qual è il modo migliore per creare un NSButton un'immagine di sfondo personalizzata, che è in grado di avere larghezza variabile, senza fare la lunetta sguardo angolo allungato? So che ci sono metodi di convenienza per fare questo con UIButton: http: / /jainmarket.blogspot.com/2009/04/create-uibuttonbutton-with-images.html ma non ho visto nulla di simile in NSButton.
Soluzione
avevo bisogno di avere uno sfondo pulsante personalizzato, ecco come ho fatto. Ho fatto un NSButton sottoclasse e il metodo drawRect overrode:
- (void)drawRect:(NSRect)dirtyRect
{
// My buttons don't have a variable height, so I make sure that the height is fixed
if (self.frame.size.height != 22) {
self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width,
22.0f);
}
//
switch (self.state) {
// Onstate graphics
case NSOnState:
NSDrawThreePartImage(self.bounds,
[NSImage imageNamed:@"btnmain_lb_h.png"], [NSImage imageNamed:@"btnmain_bg_h.png"], [NSImage imageNamed:@"btnmain_rb_h.png"],
NO, NSCompositeSourceAtop, 1.0, NO);
// Offstate graphics
default:
case NSOffState:
NSDrawThreePartImage(self.bounds,
[NSImage imageNamed:@"btnmain_lb.png"], [NSImage imageNamed:@"btnmain_bg.png"], [NSImage imageNamed:@"btnmain_rb.png"],
NO, NSCompositeSourceAtop, 1.0, NO);
break;
}
[super drawRect:dirtyRect];
}
Poi ho potuto mettere i pulsanti con Interface Builder, e per ottenere i grafici su ordinazione ho appena devono cambiare la classe alla mia nuova sottoclasse.
Altri suggerimenti
questo ha funzionato perfettamente bene per me:
[self.addBuddyCommitButton.cell setBezelStyle:NSRoundedBezelStyle];
NSButton
non ha gli stessi metodi di convenienza per le immagini di sfondo come UIButton
(il che è strano ed ecco a sperare di Apple colma questa lacuna). È necessario creare un pulsante personalizzato il mio sottoclassi NSView
e la gestione della larghezza e gli angoli da soli variabile. Non credo che sarà facile, ma non credo che sarebbe stato terribilmente difficile sia.
Questo video spiega un metodo che sembra essere semplice e richiede una sola immagine del pulsante: http://youtu.be / 7MZJxPOo_xU