objective-c - 为什么 NSMakePoint 在程序的一处失败而在其他地方工作?

标签 objective-c function bezier

这可能有一个我应该立即看到的明显答案,但我什至没有找到一个模糊的答案。请帮忙。它甚至让我想怀疑有错误,但这不太可能。

我正在尝试创建一个在 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/

相关文章:

html - 是否可以制作 HTML/CSS 折线的一部分,贝塞尔曲线?

ios - 从 UIBezierPath 获取点

iphone - 像默认的 MessageComposer 一样将联系人/号码添加到 Textview/文本字段中

iphone - NSString 变量在整个程序中可用

c++ - 带有模板参数的函数指针

c++ - 检查数组中复合图形的最大公约数的函数

ios - 手动绘制贝塞尔曲线

iphone - 界面方向旋转

ios - 如何转换/使用 CC_SHA1 方法以便它可以在 64 位系统中使用

javascript - AJAX/Javascript 功能不起作用