我有一个自定义视图(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
。我没有意识到在侧面板上添加一个对象会导致它在运行时被实例化。删除了对象,我的代码现在可以工作了。
答案 0 :(得分:0)
在initWithFrame中传递的帧是视图使用的帧,你确定你没有创建两个视图,或者调用它两次吗?