Как получить стандартные значки Mac OS X для использования в вашем приложении?

#macos #nsfilemanager #finder

#macos #какао #osx-yosemite

Вопрос:

Как получить стандартные значки Mac OS X для использования в вашем дизайне / приложении?

Под стандартными значками я подразумеваю значки панели инструментов с этих скриншотов: введите описание изображения здесь
введите описание изображения здесь

Есть ли место, где хранятся эти файлы, или какой-либо способ извлечь их из приложения Mac OS X?

Ответ №1:

см. [NSImage imageNamed:(NSString)name] и ссылки в нем для другого списка изображений, определенных ОС…

например.

NSImage * img = [NSImage imageNamed:NSImageNameFolder];

в частности, перечислены изображения панели инструментов:
https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSImage_Class/index.html#//apple_ref/doc/constant_group/Toolbar_Named_Images

Комментарии:

1. Выглядит как очень короткий список. В Standard Finder гораздо больше значков, которые также подходят для моего приложения. Можно ли их как-то извлечь?

Ответ №2:

Не все из них являются стандартными. Для тех, которые есть, вы используете [NSImage imageNamed:] с одной из определяемых системой констант имени изображения, таких как NSImageNameGoLeftTemplate или NSImageNameIconViewTemplate .

Комментарии:

1. Если некоторые из них нестандартные, как заставить их использовать в моем приложении? Не хотите изменять пользовательский интерфейс по умолчанию с помощью пользовательских значков. Есть ли способ найти путь или извлечь их из приложения?

2. @zelid если они не доступны для ос, вам придется предоставить оформление самостоятельно… очень сомнительная практика «заимствовать» изображения, которые не используются ОС, но в бесплатных библиотеках значков должно быть много, но они могут быть не на 100% одинаковыми.

3. Если они не являются стандартными, то они не являются частью «пользовательского интерфейса по умолчанию», они зависят от приложения. Вам нужно разработать и использовать свои собственные. Даже если бы вы могли извлечь их из приложения Apple, они защищены авторским правом, и вы не имеете права отправлять их как часть своего собственного приложения.

4. @Ken Хотя OP говорит «извлечь», мне кажется очевидным, что он просто хочет рисовать изображения в своем приложении, а не копировать и отправлять свою собственную версию. «Если они не стандартные, то они не являются частью «пользовательского интерфейса по умолчанию»», возможно, но, несомненно, существует океан образов ОС, которые не имеют имен или доступны через API. Краткий список изображений панели инструментов хорош; Apple могла бы сделать гораздо больше в этом направлении, что помогло бы разработчикам сохранить внешний вид Apple в своих приложениях. Я не понимаю, какие могут быть аргументы против этого, за исключением того, что Apple придется потратить время…

5. @zeppenwolf: Может быть, это то, что он хочет, но: а) нет поддерживаемого способа доступа к этим изображениям, и б) даже если бы они были, они могли измениться или исчезнуть с любым обновлением программного обеспечения, что делает их непригодными для использования в его приложении. Отправка собственных изображений или использование поддерживаемых API-интерфейсов — единственные хорошие варианты. Если пользователь не удовлетворен стандартными изображениями, предоставляемыми API, он должен сообщить об ошибке в Apple.

Ответ №3:

Другие изображения / значки доступны на IconServices :

 /*
   Type of the predefined/generic icons. For example, the call:
      err = GetIconRef(kOnSystemDisk, kSystemIconsCreator, kHelpIcon, amp;iconRef);
   will retun in iconRef the IconRef for the standard help icon.
*/

/* Generic Finder icons */

public var kClipboardIcon: Int { get }
public var kClippingUnknownTypeIcon: Int { get }
public var kClippingPictureTypeIcon: Int { get }
public var kClippingTextTypeIcon: Int { get }
public var kClippingSoundTypeIcon: Int { get }
public var kDesktopIcon: Int { get }
public var kFinderIcon: Int { get }
public var kComputerIcon: Int { get }
public var kFontSuitcaseIcon: Int { get }
public var kFullTrashIcon: Int { get }
public var kGenericApplicationIcon: Int { get }
public var kGenericCDROMIcon: Int { get }
...
...
  

Вы можете использовать методы значков NSWorkspace с указанными выше константами:

 NSWorkspace.shared.icon(forFileType: NSFileTypeForHFSTypeCode(UInt32(kGenericApplicationIcon)))