2010-04-27 1 views
3

Я использую IKSaveOptions Mac OS X 10.6 SDK ImageKit, чтобы добавить файл формата аксессуар к NSSavePanel с помощью:Есть ли способ инициализировать IKSaveOptions ImageKit по умолчанию для TIFF с компрессией LZW?

- (id)initWithImageProperties:(NSDictionary *)imageProperties imageUTType:(NSString *)imageUTType; 

и

- (void)addSaveOptionsAccessoryViewToSavePanel:(NSSavePanel *)savePanel; 

Я попытался создать в NSDictionary указать Compression = 5 , но я не могу заставить IKSaveOptions отображать Format: TIFF, Compression: LZW, когда сначала появляется NSSavePanel. Я также попытался сохранить возвращенный словарь imageProperties и словарь userSelection, а затем попытался подать его обратно в следующий раз, но NSSavePanel всегда по умолчанию имеет формат: TIFF со сжатием: None.

Кто-нибудь знает, как настроить формат/сжатие по умолчанию, отображаемое в аксессуаре?

Я хотел бы по умолчанию сохранить параметры TIFF/LZW и, кроме того, хотел бы восстановить последний формат файла для пользователя в следующий раз. Я могу контролировать формат файла с помощью imageUTType (например, kUTTypeJPEG, kUTTypePNG, kUTTypeTIFF и т. Д.), Но я все еще не могу установить начальную возможность сжатия для форматов TIFF или JPEG.

Спасибо,

-Rei

ответ

2

Там нет общественного API для управления этим. Однако вы можете изменить его с помощью аксессуаров NSSavePanel.

Пример:

self.saveOptions = [[IKSaveOptions alloc] initWithImageProperties:nil 
                  imageUTType:(NSString *)kUTTypeTIFF]; 
[self.saveOptions addSaveOptionsAccessoryViewToSavePanel:savePanel]; 


// find compression options popup button in accessory view, select desired compression 
// correct title depends on localization -> be carefull with LZW and tag 
NSView *accessoryView = [savePanel accessoryView]; 
NSArray *accessorySubViews = [accessoryView subviews]; 

for (id view in accessorySubViews) { 

    if([view isKindOfClass:[NSPopUpButton class]]){ 
     NSPopUpButton *popupButton = (NSPopUpButton *)view; 
     NSArray *menuItems =[[popupButton menu] itemArray]; 
     for (NSMenuItem *menutItem in menuItems) { 
      if([[menutItem title] isEqualToString:@"LZW"]) { 
       //make sure you reverse engineer tags for 
       [popupButton selectItemWithTitle:@"LZW"]; 
       id target = [menutItem target]; 
       SEL action = [menutItem action]; 
       [target performSelector:action withObject:popupButton]; 
      } 
     } 
    } 
}