2013-12-11 2 views
3

Я ранее работал над IOS, но только начал работать над MacOSX какао-приложением. У меня была проблема относительно NSProgressIndicator.Невозможно анимировать NSProgressIndicator из appdelegate.m

Когда я создаю приложение, у меня был appdelegate. h & .m и mainmenu.xib. Я добавил индикатор неопределенного прогресса в файл MainMenu.xib, и в моем файле Appdelegate.h он подключился к экземпляру NSProgressIndicator с использованием IBOutlet.

@property (nonatomic, retain) IBOutlet NSProgressIndicator* activityIndicator; 

В моем файле Appdelegate.m я это делаю:

activityIndicator = [[NSProgressIndicator alloc]initWithFrame:NSMakeRect(206,82,120,120)]; 

[activityIndicator setStyle:NSProgressIndicatorSpinningStyle]; 

[activityIndicator startAnimation:nil]; 

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

+0

Там, вероятно/возможно способ получить ваше приложение делегата, чтобы сделать это, но это совсем не то, что ваше приложение делегат должен делать ... – nhgrif

+0

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

ответ

3

Это то, что вы делаете в данный момент:

  1. Вы добавили представление о ходе в интерфейсе строителя
  2. Вы объявили свойство для него и соединив его в интерфейсе строителя
  3. Вы затем программно создать новый просмотреть прогресс во время выполнения и присвоить его переменной.

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

Вы должны либо создать представление о ходе в Interface Builder, назначьте розетку, а затем использовать его, т.е. удалить эту строку:

activityIndicator = [[NSProgressIndicator alloc]initWithFrame:NSMakeRect(206,82,120,120)]; 

Или вы можете программно создать представление о ходе, но тогда вы должны добавьте его в свой вид.

Если вы хотите изменить положение представления прогресса, которое было загружено из файла nib, установите свойство frame вместо создания нового экземпляра.

activityIndicator.frame = NSMakeRect(206,82,120,120);