Какао - Анимация NSWindow с помощью setFrame - PullRequest
2 голосов
/ 08 сентября 2011

У меня есть следующий блок кода.

NSRect windowFrame = [window frame];
windowFrame.size.height = [view frame].size.height + WINDOW_TOOLBAR_HEIGHT;
windowFrame.size.width = [view frame].size.width;
windowFrame.origin.y = NSMaxY([window frame]) - ([view frame].size.height + WINDOW_TOOLBAR_HEIGHT);

if ([[contentView subviews] count] != 0)
{
    [[[contentView subviews] objectAtIndex:0] removeFromSuperview];
}

[window setFrame:windowFrame display:YES animate:YES];
[contentView setFrame:[view frame]];
[contentView addSubview:view];  

Он переключает фрейм в новое представление, но я никогда не получаю анимацию сжатия / увеличения.Если я помещу это перед [окном]

NSLog([NSString stringWithFormat: @"%.2f", windowFrame.size.height]);

, я получу разные размеры .. вот вывод

2011-09-07 14:13:02.418 Spark[29919:903] 492.00
2011-09-07 14:13:03.610 Spark[29919:903] 580.00
2011-09-07 14:13:05.955 Spark[29919:903] 492.00
2011-09-07 14:13:08.339 Spark[29919:903] 255.00

Не уверен, что мне не хватает.

спасибо!

РЕДАКТИРОВАТЬ

Я добавил простой проект, чтобы увидеть мои проблемы

http://dl.dropbox.com/u/13731121/Spark.zip

1 Ответ

3 голосов
/ 10 сентября 2011

Я рассмотрел ваш проект и вот мои баллы:

  1. Ваш preference.xib ... не является стандартным, если не сказать больше. Обычно при создании оконного контроллера вы должны установить класс оконного контроллера как владельца файла оконного пера. Ваш владелец файла preference.xib NSObject, а PreferenceController - отдельный объект. Итак, я исправил это и восстановил почти все IBOutlets.

  2. Я восстановил почти все выходы, потому что вам не нужна такая вещь, как contentView, потому что само окно имеет такое свойство, как contentView, поэтому достаточно установить свойство contentView окна. 1013 *

  3. Вы устанавливаете FRAME в ContentView, что очень, очень неправильно (если вы действительно не знаете, что делаете). Я изменил его, чтобы вместо него установить BOUNDS для ContentView.

...