2014-09-14 6 views
0

Я не могу найти способ установить высоту NSProgressIndicator программно.Программно сменить высоту NSProgressIndicator

Мои пытается до сих пор:

NSProgressIndicator *ind = [[NSProgressIndicator alloc] init]; 
[ind setStyle: NSProgressIndicatorBarStyle]; 
// Height does not change height of the actual indicator 
[ind setFrame: NSMakeRect(0, 0, 100, 50)]; 
[ind setBounds: NSMakeRect(0, 0, 100, 50)]; 
//[ind setControlSize: 0]; does only make it smaller, not bigger 
[view addSubview: ind]; 

Я нашел NSProgressIndicatorBarStyle перечисления в документации, но я не мог найти способ, чтобы указать толщину.

Вот скриншот с описанием моей проблемы: (слой имеет фон красного цвета для лучшего понимания):

enter image description here

Это также происходит при использовании NSButton класса. Есть ли обходной путь для этого?

+1

Вы не можете должным образом сделать это. Многие виджеты в Cocoa используют растровые изображения для рисования. Растровые изображения имеют фиксированный размер. Они не будут работать правильно, если их масштабировать произвольно. Если вы установите 'bounds' ** not **, чтобы соответствовать кадру, но чтобы соответствовать нормальной высоте, вы могли бы растянуть графику, но это выглядело бы ужасно. –

ответ

1

Как и в iOS, вы не можете изменить высоту индикатора прогресса, просто изменяя его фрейм, из-за ограничений рамки. Однако на прошивкой вы сможете достичь того же результата, играя с преобразованием

_indicator.transform = CGAffineTransformMakeScale(1.0f, 0.6f); 

EDIT: Я только что попробовал на Mac OS X

_indicator.layer.transform = CATransform3DMakeScale(1.0f, 0.6f, 0.0f); 

и он не работает, так что это не как iOS, вероятно, из-за того, как это реализовано на Cocoa (как предположил Кен). Единственный способ, которым мне удалось изменить высоту, - это использовать controlSize, но я не думаю, что он подойдет вашим потребностям (поскольку он не позволяет вам указывать точки).

[_indicator setControlSize:NSMiniControlSize]; // or NSSmallControlSize 

Вы должны быть в состоянии использовать произвольный кадр подклассов NSProgressIndicator и первостепенную drawRect, в этот момент моя рекомендация будет смотреть вокруг, чтобы найти что-то, что может быть расширена для использования, как это один https://www.cocoacontrols.com/controls/lbprogressbar

+0

К сожалению, нет свойства под названием 'transform'. – d3L

-1

в IB вы можете

  1. выбрать управление NSProgressIndicator
  2. утилитами просмотра выберите ю е Посмотреть эффекты инспектор
  3. нажмите + в Content Фильтры
  4. выберите Lanczos Scale Transform фильтр
  5. установить соответствующее значение масштаба в масштабно строке
  6. установить соотношение сторон тоже, если вам нужно изменить высоту только

это может быть добавлено программно также, только Google для него, как добавить фильтры содержания в NSView

+0

Масштабирование слоя делает вашу графику некрасивой. Подкласс «NSView» должен выполнять такой вид задачи, хотя его нетривиально. – Leviathlon

+0

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

Смежные вопросы