NSButton con anchura variable tamaño, esquinas redondeadas
Pregunta
¿Cuál es la mejor manera de crear una imagen de fondo NSButton una costumbre con la que es capaz de tener anchura variable, sin que el aspecto bisel esquina estirada? Sé que hay métodos de conveniencia de hacer esto con UIButton: http: / /jainmarket.blogspot.com/2009/04/create-uibuttonbutton-with-images.html pero no he visto nada similar en NSButton.
Solución
tenía que tener un fondo botón personalizado, aquí está cómo lo hice. Hice un método drawRect overrode NSButton subclase y:
- (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];
}
Entonces podría poner los botones usando el Interface Builder, y para obtener los gráficos personalizados que sólo tienen que cambiar la clase de mi nueva subclase.
Otros consejos
esto funcionó perfectamente bien para mí:
[self.addBuddyCommitButton.cell setBezelStyle:NSRoundedBezelStyle];
NSButton
no tiene los mismos métodos de conveniencia para las imágenes de fondo como UIButton
(lo cual es extraño y aquí está la esperanza de Apple tiende un puente sobre la brecha). Tendrá que crear un botón personalizado de subclases mi NSView
y gastos de la anchura y esquinas usted mismo variable. Yo no creo que vaya a ser fácil, pero no creo que sería terriblemente difícil tampoco.
Este video explica un método que parece ser simple y sólo requiere una imagen del botón: http://youtu.be / 7MZJxPOo_xU