我在使用NSSize时遇到问题

问题描述:

我正在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 

你应该初始值分配给x

int x = 100; 

否则,结果是不确定的。

+0

我已经这样做了,但是会发生什么情况是,当我调整窗口大小时,它会捕捉到一个大小,并且不允许我调整大小;它不是动态调整大小。 – lampShade 2010-07-31 03:13:22

+0

另外,我确实在Interface Builder中启用了调整大小。 – lampShade 2010-07-31 03:16:25

让我们考虑一下你希望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