Мне нужно поместить изображение из NSProgressIndicator в ячейку NSOutlineView. Я написал код, который делает это для детерминированного индикатора, и он прекрасно работает:
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];
Я попытался изменить код, чтобы он также давал мне неопределенные изображения индикаторов. Однако для неопределенного случая я всегда получаю пустое изображение 16x16. (Я подтвердил это, записав изображение в файл в каждом случае, определенный случай дает мне изображение индикатора прогресса, неопределенный случай всегда - белый квадрат 16x16).
Модифицированный код:
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
}
Используют ли неопределенные индикаторы хода выполнения какой-либо тип рисунка, который вызывает -dataWithPDFInsideRect: быть неспособным захватить их изображение?
Дополнительная информация: я пытался настроить индикатор прогресса так, чтобы он не использовал многопоточную анимацию, а также пытался захватить содержимое с помощью метода lockFocus от NSImage, как предложено ниже, но ни одна из этих попыток не имела значения.
Код ячейки индикатора прогресса, который Дейв упоминает ниже ( AMIndeterminateProgressIndicatorCell ), является отличным решением, но я все же хотел бы знать, почему я не могу использовать ту же технику, которая работает с режимом определения.