Necesito poner la imagen de un NSProgressIndicator en una NSOutlineView Cell. He redactado código que hace esto para un indicador determinado y funciona muy grande:Obteniendo un NSImage de un NSProgressIndicator
NSProgressIndicator *progressIndicator = [[NSProgressIndicator alloc] initWithFrame:NSMakeRect(0, 0, 16, 16)];
[progressIndicator setStyle:NSProgressIndicatorSpinningStyle];
[progressIndicator setIndeterminate:NO];
[progressIndicator setMaxValue:100.0];
[progressIndicator setDoubleValue:somePercentage];
NSImage *updateImage = [[NSImage alloc] initWithData:[progressIndicator dataWithPDFInsideRect:[progressIndicator frame]]];
[progressIndicator release];
return [updateImage autorelease];
he tratado de modificar el código para darme también imágenes indicadoras indeterminadas. Sin embargo, para el caso indeterminado, siempre obtengo una imagen en blanco de 16x16. (He confirmado esto escribiendo la imagen en un archivo en cada caso, el caso determinado me da la imagen del indicador de progreso, el caso indeterminado siempre es un cuadrado blanco de 16x16).
El código modificado es:
if(self.lengthUnknown)
{
NSProgressIndicator *progressIndicator = [[NSProgressIndicator alloc] initWithFrame:NSMakeRect(0, 0, 16, 16)];
[progressIndicator setStyle:NSProgressIndicatorSpinningStyle];
[progressIndicator setIndeterminate:YES];
NSImage *updateImage = [[NSImage alloc] initWithData:[progressIndicator dataWithPDFInsideRect:[progressIndicator frame]]];
[progressIndicator release];
return [updateImage autorelease];
}
else
{
// Same code as the first listing, this case works fine
}
Haz indicadores de progreso indeterminada utilizan algún tipo de dibujo que causa -dataWithPDFInsideRect: ser incapaz de capturar su imagen?
Más información: Intenté fijar el indicador de progreso a no utilizar la animación roscado, así como tratar de agarrar el contenido a través del método de lockFocus NSImage como se sugiere a continuación, pero ninguno de esos intentos hizo una diferencia.
El código de celda de indicador de progreso que Dave menciona a continuación (AMIndeterminateProgressIndicatorCell) es una gran solución, pero me gustaría saber por qué no puedo utilizar la misma técnica que funciona con el modo determinado.