这可能有一个我应该立即看到的明显答案,但我什至没有找到一个模糊的答案。请帮忙。它甚至让我想怀疑有错误,但这不太可能。
我正在尝试创建一个在 zz 点形成十字的函数,并且它部分起作用。
将鼠标悬停在调试中的变量上,同时停在函数末尾的断点处,会显示值。我将 NSMakePoint 的结果 z1 和 z2 作为注释插入到相应的行上。
为什么 NSMakePoint 在我的程序中的一个地方失败而在其他地方工作?
第一次出现时 zz.x 应该增加 10;相反,它会将 zz.y 增加 10。
第二次出现时 zz.x 应该减少 10;相反,它会将 zz.y 减少 10。
在接下来的两次出现中,它工作正常。
首先,我尝试在参数中增加 x,如顶部评论所示;然后我尝试在参数之前增加 x ,如图所示。我尝试了 float 和 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 中可以互换。他们是吗?
最佳答案
始终验证输入。 验证传递给函数的参数是否是相关值。 一种方法是始终在开始时初始化为已知值。这看起来像是基本的 C 卫生。 仅声明原始 C 类型的全局变量并不能保证它具有任何值,而只能在内存中为特定内存中该类型的大小留出一些空间
CGFloat 是在头文件中声明的 typedef。 您需要熟悉如何在标题中查找这些内容,因为这将成为一项宝贵的技能。 XCode 使其变得 super 简单,但您还需要阅读 Xcode 帮助..;)
CGFloat 是 double 型还是浮点型,具体取决于硬件。 所以,这是一个 ifdef typedef ...
关于objective-c - 为什么 NSMakePoint 在程序的一处失败而在其他地方工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13187961/