我刚开始一个全新的项目GrafLaboratory,在NSView中进行绘图实验。 我在主窗口中添加了一个自定义视图,并将其配置为在窗口改变大小时采用它的大小。
我将我的InitFrameWith修改为:
- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
if (self) {
NSRect r = [self bounds];
}
return self;
}
当我第一次启动新应用并询问[自我限制]时,我得到了正确的值:{{0,50},{600,450}}。然后我用鼠标拖动来改变窗口的大小。重新启动我的应用程序时,initWithFrame返回相同的值:{{0,50},{600,450}}。
但我改变了尺寸。我已经尝试了几件事但没有成功。
有什么线索我做错了吗?
谢谢,罗纳德
答案 0 :(得分:2)
initWithFrame仅在初始化帧内的对象时才相关。
如果是带有自定义绘图的自定义UIView,请查看:
- (void)drawRect:(NSRect)frame
当调用setNeedsDisplay和/或调整视图大小时,将调用它。
使用一些自定义视图,我在initWithFrame中做的一件事是设置自动调整大小的掩码:
// subviews autoresize
[self setAutoresizesSubviews:YES];
// set resize masks (springs)
[self setAutoresizingMask:(NSViewMaxXMargin | NSViewMinXMargin |
NSViewMaxYMargin | NSViewMinYMargin |
NSViewHeightSizable | NSViewWidthSizable)];
然后在init和drawRect中,如果rect已经改变,我会调用layoutViews metod:
- (void)drawRect:(NSRect)frame {
...
// called on resize. on init, delegate isn't hooked up so we'll skip
if (!NSEqualRects(_prevRect, [self bounds]))
{
[self layoutViews];
}
// stash away rect for comparison so layout view code only happens when the rect changes
_prevRect = [self bounds];
我的layoutViews有自定义布局逻辑。
希望有所帮助。