Qual è il modo migliore per creare un NSButton con un'immagine di sfondo personalizzata, che può avere larghezza variabile, senza allungare la cornice dell'angolo? So che ci sono metodi convenienti per farlo con UIButton: http://jainmarket.blogspot.com/2009/04/create-uibuttonbutton-with-images.html ma non ho visto nulla di simile in NSButton.NSButton con larghezza variabile, angoli arrotondati
risposta
Avevo bisogno di avere uno sfondo personalizzato, ecco come l'ho fatto. Ho fatto una sottoclasse NSButton e calpestato drawRect metodo:
- (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 tasti usando Interface Builder, e per ottenere i grafici su ordinazione mi resta che cambiare la classe alla mia nuova sottoclasse.
NSButton
non ha gli stessi metodi di convenienza per le immagini di sfondo come UIButton
(che è strano ed ecco sperare che Apple colmi tale divario). Dovrai creare un pulsante personalizzato la mia sottoclasse NSView
e gestire la larghezza e gli angoli variabili da soli. Non penso che sarà facile, ma non penso che sarebbe terribilmente difficile neanche.
questo ha funzionato perfettamente bene per me:
[self.addBuddyCommitButton.cell setBezelStyle:NSRoundedBezelStyle];
dopo aver sovrascritto drawBezelWithFrame: (NSRect) frame inView: (NSView *) controlView funziona! – tomeron11
Questo video spiega un metodo che sembra essere semplice e richiede una sola immagine del pulsante: http://youtu.be/7MZJxPOo_xU
Vergogna giusto? :) Non come il metodo di convenienza in UIButton è davvero così conveniente. – BadPirate