SceneKit技术问题:如何用for-in循环按升序排列按钮?
解决按钮标签顺序错误的问题
你当前的代码通过嵌套循环生成按钮,但标签顺序不符合0-9的目标要求,问题出在计数器自增的逻辑和标签计算方式上。
问题分析
现有代码里,counterForLoop每次循环自增1,导致第一行(y=0)生成标签1-5,第二行(y=1)生成6-10,既不符合0-9的需求,也和目标排列顺序不匹配。
解决方案
不需要依赖自增计数器,直接通过y和x的循环变量计算正确标签值:每个按钮的标签应为 y * 5 + x,这样:
- 当y=0(第一行)时,x从0到4,标签依次为0、1、2、3、4
- 当y=1(第二行)时,x从0到4,标签依次为5、6、7、8、9
修改后的代码如下:
func createButtons() { for y in 0...1 { for x in 0...4 { // 直接通过循环变量计算标签,无需额外计数器 let tag = y * 5 + x self.button = ButtonPrototype(pos: .init(CGFloat(x)/7, CGFloat(y)/7, 0), imageName: "\(tag)") parentNode.addChildNode(button) parentNode.position = SCNVector3(x: 100, y: 100, z: 100) } } }
额外调整
如果目标排列是第一行5-9,第二行0-4(行顺序反转),只需将标签计算改为 (1 - y) * 5 + x 即可。
内容的提问来源于stack exchange,提问作者AntonyCatcher
相关产品推荐
相关产品推荐

