Objective-C中SCNode无boundingBox属性?getBoundingBoxMin:max:用法解惑
在Objective-C中获取SCNode的包围盒值
你提到的getBoundingBoxMin:max:方法是Objective-C里替代Swift中boundingBox属性的正确方式,它通过输出参数返回包围盒的最小点和最大点,返回的BOOL值仅用于判断是否成功获取到有效包围盒(比如节点无几何体时会返回NO)。
具体使用步骤如下:
- 声明两个
SCNVector3类型的变量,用于接收包围盒的最小点和最大点 - 调用方法时传入这两个变量的地址(使用
&符号) - 判断方法返回值为YES后,即可使用这两个变量进行计算或位置设置
示例代码:
// 定义存储包围盒最小、最大点的变量 SCNVector3 minBox, maxBox; // 调用方法获取包围盒信息,验证是否成功 if ([yourNode getBoundingBoxMin:&minBox max:&maxBox]) { // 计算节点高度,对应Swift中的vaseHeight = vaseNode.boundingBox.max.y - vaseNode.boundingBox.min.y CGFloat nodeHeight = maxBox.y - minBox.y; // 设置子节点位置,对应Swift中的glassesNode.position.z = faceNode.boundingBox.max.z * 3 / 4 childNode.position.z = maxBox.z * 3.0 / 4.0; }
补充说明
- 当方法返回NO时,说明当前节点没有可计算的包围盒(比如节点未添加几何体、节点为空),此时
minBox和maxBox的值无效,不要使用。 SCNVector3的x/y/z分量分别对应三维空间中的三个轴坐标,和Swift里boundingBox的min/max属性用法完全一致。
内容的提问来源于stack exchange,提问作者IamRob
相关产品推荐
相关产品推荐

