2010-07-31 128 views
1

我正在Aaron Hillegass的書Cocoa Programming for 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,所以使用這個結構就是我認爲我犯了錯誤的地方。

附錄:我將上面的代碼更改爲以下內容。我知道我正在傳遞一個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 2010-07-31 03:13:22

+0

另外,我確實在Interface Builder中啓用了調整大小。 – lampShade 2010-07-31 03:16:25

1

讓我們考慮一下你希望mySize是什麼。

  • 你想它的寬度是相同的frameSize.width
  • 你想它的高度是frameSize.width * 2

現在讓我們來看看你做x什麼:

  • 您設置mySize.width等於它
  • 您設置mySize.heightx * 2

由此我們可以得出結論: :

你想設置xframeSize.width

或者,整個方法可能只是return NSMakeSize(frameSize.width, frameSize.width * 2)

+0

謝謝你,你的解決方案是我遇到麻煩的原因。我如何知道有一個函數(NSMakeSize)能夠完成你的建議? – lampShade 2010-07-31 03:34:19

+0

它仍然無法正常工作:( – lampShade 2010-07-31 04:31:25