2010-07-31 6 views
1

Я занимаюсь выполнением упражнений в книге Аарона Хиллегасса «Программирование какао для Mac». То, что я пытаюсь сделать, - это изменить размер окна в два раза выше высоты ширины. Вот мой код до сих пор.У меня проблема с использованием NSSize

#import "AppController.h" 


@implementation AppController 

-(id) init 
{ 
    [super init]; 
    NSLog(@"init"); 
    [window setDelegate:self]; 
    return self; 
} 

-(NSSize) windowWillResize:(NSWindow*) sender 
toSize:(NSSize)frameSize 
{ 
    int x; 
    NSSize mySize; 
    mySize.width = x; 
    mySize.height = 2*x; 
    NSLog(@"mySize is %f wide and %f tall",mySize.width,mySize.height); 
    return mySize; 
} 

Это не работает должным образом. Я уверен, что я не использую тип NSSize правильно. Я не знаю много C, поэтому использование структуры - это то, где я думаю, что делаю свою ошибку.

ADDENDUM: Я изменил приведенный выше код на следующий. Я знаю, что мне передают NSSize, поэтому нет причин создавать другой (то есть mySize). Однако я не понимаю, почему это работает. Может кто-то объяснить.

#import "AppController.h" 


@implementation AppController 

-(id) init 
{ 
    [super init]; 
    NSLog(@"init"); 
    [window setDelegate:self]; 
    return self; 
} 



-(NSSize) windowWillResize:(NSWindow*) sender 
toSize:(NSSize)frameSize 
{ 
    //float x = 100; 
    //NSSize mySize; 
    //mySize.width = x; 
    //mySize.height = x * 2; 
    //NSLog(@"mySize is %f wide and %f tall",mySize.width,mySize.height); 
    NSLog(@"mySize is %f wide and %f tall",frameSize.width,frameSize.height); 
    return NSMakeSize(frameSize.width, frameSize.width * 2); 

} 
@end 

ответ

0

Вы должны присвоить начальное значение x:

int x = 100; 

В противном случае, результат не определен.

+0

Я сделал это, но происходит то, что при изменении размера окна он просто привязывается к одному размеру и не позволяет изменять размер; это не динамическое изменение размера. – lampShade

+0

Кроме того, у меня есть разрешение на изменение размера в интерфейсе Builder. – lampShade

1

Давайте подумаем о том, что вы хотите mySize.

  • Вы хотите его ширина будет такой же, как frameSize.width
  • Вы хотите его высота будет frameSize.width * 2.

Теперь давайте посмотрим на то, что вы делаете с x:

  • Вы устанавливаете mySize.width быть равным ему
  • Вы устанавливаете mySize.height быть x * 2

Из этого можно заключить, :

Вы хотите установить x - frameSize.width.

В качестве альтернативы, весь метод может быть только return NSMakeSize(frameSize.width, frameSize.width * 2).

+0

Спасибо, и ваше решение - вот почему у меня проблемы. Как я узнаю, что есть функция (NSMakeSize), которая делает то, что вы предлагаете? – lampShade

+0

Он все еще работает неправильно :( – lampShade

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