我在使用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;
否则,结果是不确定的。
答
让我们考虑一下你希望mySize是什么。
- 你想它的宽度是相同的
frameSize.width
- 你想它的高度是
frameSize.width * 2
。
现在让我们来看看你做x
什么:
- 您设置
mySize.width
等于它 - 您设置
mySize.height
为x * 2
由此我们可以得出结论: :
你想设置x
至frameSize.width
。
或者,整个方法可能只是return NSMakeSize(frameSize.width, frameSize.width * 2)
。
我已经这样做了,但是会发生什么情况是,当我调整窗口大小时,它会捕捉到一个大小,并且不允许我调整大小;它不是动态调整大小。 – lampShade 2010-07-31 03:13:22
另外,我确实在Interface Builder中启用了调整大小。 – lampShade 2010-07-31 03:16:25