2010-04-27 67 views
1

这里是我的代码:UIView的帧起点没有设置好

frame = _pageContentView.frame; 
    NSLog(@"%f; %f; %f; %f;", frame.origin.x, frame.origin.y, frame.size.width, frame.size.height); 
    frame.size.height = pageContentView.frame.size.height; 
    NSLog(@"%f; %f; %f; %f;", frame.origin.x, frame.origin.y, frame.size.width, frame.size.height); 
    _pageContentView.frame = frame; 
    NSLog(@"%f; %f; %f; %f;", _pageContentView.frame.origin.x, _pageContentView.frame.origin.y, _pageContentView.frame.size.width, _pageContentView.frame.size.height); 

而且NSLog的输出这些值:
0.000000; 0.000000; 317.648956; 0.000000;
0.000000; 0.000000; 317.648956; 768.000000;
0.000007; 0.000004; 317.648956; 768.000000;

你能看到吗?在最后一行中,x和y坐标有点疯狂......这些数字在哪里出现?这里有什么问题?

回答

3

有些数学已经完成到零;有效地将它们变成0.change。但是请注意,不规则性代表0.0007%的漂移。这真的是没什么好担心的。您可以安全地忽略该时间段后的第一个数字之后的任何内容,如果您正在移动视图,则可以忽略两个数字。

+0

但是,算什么? – 2010-04-27 12:11:12

+0

谁知道?谁在乎?它可能就像从双重到浮动来回分流的东西一样简单;或者在FPU中以前的迭代中留下的残余物。这种差异是完全无关的,应该忽略。 (0.000007代表0.0007%,或像素的十万分之七十;也就是说,例如35纳米)。 – 2010-04-27 12:28:39

+0

电脑无法做到真正的数学。由于计算机在处理数学时必须做出妥协,尤其是在无理数的情况下,所有浮点数都具有可变性。关于这个问题有一篇着名的论文。 http://docs.sun.com/source/806-3568/ncg_goldberg.html – TechZen 2010-04-27 16:04:47