如何在初始化时获取NSView的尺寸?

时间:2011-10-21 08:48:08

标签: objective-c macos cocoa graphics

我有一个自定义视图(NSView子类),我希望在实例化视图时,即在drawRect之前,根据视图的尺寸(宽度/高度)存储一些数据被叫。

我希望能够使用initWithFrame,并从传入的NSRect中获取边界,但是如果我检查调试器中的数据,我只得到{{1} NSRect的实例。据推测它还没有初始化?

更令人费解的是,如果我将帧宽度记录到控制台,我会得到两次值:

(x=0, y=0), (width=0, height=0)

此代码记录:

- (id)initWithFrame:(NSRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        CGFloat width = frame.size.width;
        NSLog(@"width: %f", width);
    }
}

就好像initWithFrame在两个独立的线程中运行,我们有某种竞争条件。初始化视图时获取帧宽度的正确方法是什么?

更新[已解决]:此问题现已解决。事实证明,我在Interface Builder中有两个21/10/2011 09:40:55.733 Test App: width: 480.000000 21/10/2011 09:40:55.818 Test App: width: 0.000000 子类的实例。一个被绘制为NSView,另一个是侧面板中的Custom View。我没有意识到在侧面板上添加一个对象会导致它在运行时被实例化。删除了对象,我的代码现在可以工作了。

1 个答案:

答案 0 :(得分:0)

在initWithFrame中传递的帧是视图使用的帧,你确定你没有创建两个视图,或者调用它两次吗?

相关问题