【发布时间】:2012-10-22 16:23:29
【问题描述】:
这可能有一个我应该立即看到的明显答案,但我什至没有找到一个晦涩难懂的答案。请帮忙。它甚至让我想怀疑一个错误,但这不太可能。
我正在尝试创建一个函数,该函数将在 zz 点创建一个十字,并且它可以部分工作。
在函数末尾的断点处停止时,将鼠标悬停在 Debug 中的变量上会显示值。我将来自 NSMakePoint 的结果 z1 和 z2 作为 cmets 插入到相应的行中。
为什么 NSMakePoint 在我的程序中的一个地方失败而在其他地方工作?
第一次出现应将 zz.x 增加 10;而是将 zz.y 增加 10。
第二次出现应将 zz.x 减 10;而是将 zz.y 递减 10。
在接下来的两次事件中,它工作正常。
首先我尝试在参数中增加 x,如顶部注释所示;然后我尝试在参数之前增加 x ,如图所示。我试过浮动以及 CGFloat。
这里有什么问题?
#import "untitled.h"
CGFloat xx,yy;
NSPoint z1,z2, zz;
NSBezierPath *path;
void markpoint (NSPoint zz){ //zz= 133.333, 100 OK
// z2= NSMakePoint(zz.x+10,zz.y); I tried this first and failed;
then I broke out the increment as follows:
xx=zz.x+10; //xx= 143.333 OK
yy=zz.y; //yy= 100 OK
z1= NSMakePoint(xx,yy); //z1= 133.333,110 but should be 143.333,100
[path moveToPoint:z1];
z2= NSMakePoint(zz.x-10,zz.y); //z2= 133.333, 90 but should be 123.333,100
[path lineToPoint:z2];
z1= NSMakePoint(zz.x,zz.y+10); //z1= 133.333, 110 OK
[path moveToPoint:z1];
z2= NSMakePoint(zz.x,zz.y-10); //z2= 133.333, 90 OK
[path lineToPoint:z2];
}
附带问题:我找不到任何地方断言或否认 float 和 CGFloat 在 Bezier 系列函数和 Cocoa 中的 NSPoint 中是可互换的。是吗?
【问题讨论】:
-
我想知道问题可能出在您声明 NSPoint z1、z2 和 zz 而不初始化它们的方式上。通常这对于非指针变量是安全的,但是如果我没有在开始时将它们明确设置为 0 和 NO,我会遇到 NSUInteger 甚至 BOOL 变量的奇怪问题。 Objective-C 的一些标量类型看起来有点像指针。
-
我怀疑您看到的是调试器工件,而不是“现实”。有时,由于代码被重新排列,调试器将返回与您停止的位置不对应的值。使用 NSLog 语句转储值。
-
我输入了 NSLog,它产生的值与 Tooltip 相同。
-
抱歉耽搁了。这是我的其余回复:我初始化为 0,0 并且出现了正确的值!然后我通过删除这些行恢复到初始状态,它仍然出现了正确的值!嗯?它是如何自我修复的?
-
当有人给你正确答案时,点击帖子分数下方的绿色复选框。这样做表明答案是解决您的问题的答案。
标签: objective-c function bezier