NSButton стиль градиента - PullRequest
       6

NSButton стиль градиента

4 голосов
/ 31 января 2012

В компонентах Interface Builder у меня есть кнопка градиента

Gradient Button

Я бы хотел создать эту кнопку программно. Но я не могу найти комбинацию типа кнопки, стиля рамки и типа градиента, чтобы воспроизвести его. Моя локальная цель - создать кнопки «плюс» (добавить) и «минус» (удалить), как это

Add and remove items, gradient button

Может быть, вы также можете знать, как реализовать часть справа минус? Похоже, отключена кнопка градиента.

Обновление (2012-02-01, 14:52)

Я поместил кнопку градиента на пустой XIB, открыл XIB с помощью текстового редактора и нашел свою кнопку. Это часть кода.

<array class="NSMutableArray" key="NSSubviews">
  <object class="NSButton" id="155381693">
    <reference key="NSNextResponder" ref="1005"/>
    <int key="NSvFlags">268</int>
    <string key="NSFrame">{{20, 303}, {106, 23}}</string>
    <reference key="NSSuperview" ref="1005"/>
    <reference key="NSWindow"/>
    <string key="NSReuseIdentifierKey">_NS:2466</string>
    <bool key="NSEnabled">YES</bool>
    <object class="NSButtonCell" key="NSCell" id="976550657">
      <int key="NSCellFlags">-2080244224</int>
      <int key="NSCellFlags2">134217728</int>
      <string key="NSContents">Gradient Button</string>
      <object class="NSFont" key="NSSupport">
        <string key="NSName">LucidaGrande</string>
        <double key="NSSize">13</double>
        <int key="NSfFlags">1044</int>
      </object>
      <string key="NSCellIdentifier">_NS:2466</string>
      <reference key="NSControlView" ref="155381693"/>
      <int key="NSButtonFlags">-2033434369</int>
      <int key="NSButtonFlags2">162</int>
      <string key="NSAlternateContents"/>
      <string key="NSKeyEquivalent"/>
      <int key="NSPeriodicDelay">400</int>
      <int key="NSPeriodicInterval">75</int>
    </object>
  </object>
</array>

Я попытаюсь воспроизвести кнопку, используя эту информацию.

Ответы [ 2 ]

8 голосов
/ 31 марта 2012

О боже, я был слепым.Просто установите стиль рамки на NSSmallSquareBezelStyle и тип кнопки на NSMomentaryPushInButton.

Мне не нужны изображения.Мне не нужна пользовательская отрисовка с CoreGraphics (для этого я создал свой собственный класс).Мне не нужно разбирать XIB.Мне не нужно сбрасывать структуры времени выполнения (я сделал это, чтобы найти нужные значения полей в выходной кнопке градиента, созданной с помощью xib).Мне пришлось попробовать все значения стиля рамки из документации .Но если вы прочитаете описание для NSSmallSquareBezelStyle в документации, вы поймете мою путаницу: это очень далеко от значения "Градиент" в мастере IB.

enter image description here

Правильный код:

NSButton *gradientButton = [[NSButton alloc] initWithFrame:NSMakeRect(40, 40, 80, 32)];
[gradientButton setButtonType:NSMomentaryPushInButton];
[gradientButton setBezelStyle:NSSmallSquareBezelStyle];
[gradientButton setTitle:@"Title"];
[self.window.contentView addSubview:gradientButton];

Результат:

enter image description here

0 голосов
/ 31 января 2012

Я полагаю, что кнопка, на которую вы ссылаетесь, является пользовательской кнопкой и, вероятно, пользовательским фоновым изображением, хотя она, безусловно, может быть создана программно.Проблема с этими типами кнопок заключается в том, что существует несколько вариантов этой кнопки, которые выглядят очень похожими, но имеют небольшие различия.

Самый простой способ создать эти кнопки - использовать кнопки градиента и перетащить +и - изображения из иконок Xcodes на них.В противном случае вы можете поискать пользовательский NSButton, который выглядит так, как вы хотите.Я полагаю, что были некоторые программы с открытым исходным кодом, в которых они есть, но я не могу вспомнить их прямо в голове.

...