Ios 为什么两个NSTimer相互冲突?

Ios 为什么两个NSTimer相互冲突?,ios,swift,Ios,Swift,我有两个计时器:一个是每0.015秒在屏幕上向下移动一个图像,另一个是计算游戏运行了多长时间并显示它,精度为0.1秒: moveDown = NSTimer.scheduledTimerWithTimeInterval(0.015, target:self, selector: Selector("updatePos"), userInfo: nil, repeats: true) time = NSTimer.scheduledTimerWithTimeInterval(0.1, targe

我有两个计时器:一个是每0.015秒在屏幕上向下移动一个图像,另一个是计算游戏运行了多长时间并显示它,精度为0.1秒:

moveDown = NSTimer.scheduledTimerWithTimeInterval(0.015, target:self, selector: Selector("updatePos"), userInfo: nil, repeats: true)

time = NSTimer.scheduledTimerWithTimeInterval(0.1, target:self, selector: Selector("incrementTime"), userInfo: nil, repeats: true)
我知道这两个功能都能正常工作,但问题是,当NSTimer启动时,每隔0.1秒图像就会重置到其原始位置,并开始再次移动,然后在0.1秒后返回。增量时间功能非常简单,不会以任何方式与其他计时器交互:

func incrementTime() {
    varTime += 0.1
    timeLabel.text = String(varTime)
}
这是updatePos函数:

    func updatePos() {
        ifDone()
        r1.center.y += speed1
        r2.center.y += speed2
        r3.center.y += speed3
        r4.center.y += speed4
        r5.center.y += speed5
        r6.center.y += speed6
        r7.center.y += speed7
        r8.center.y += speed8
        r9.center.y += speed9
        r10.center.y += speed10
        r11.center.y += speed11
        r12.center.y += speed12
        r13.center.y += speed13
        r14.center.y += speed14
        r15.center.y += speed15
        for q in r {
            if (q.center.x > player.center.x - 15) && (q.center.x < player.center.x + 15) && (q.center.y > player.center.y - 15) && (q.center.y < player.center.y + 15) {
                start.text = "RESTART"
                start.center.y = 289
                startOut.center.y = 289
                moveDown.invalidate()
                time.invalidate()
            }
        }
    }

如何计算图像的位置?它是否以任何方式连接到
varTime
?^相同的问题。请发布
updatePos
的方法定义好吗?另外,请注意:计时器的0.015秒间隔比屏幕的刷新率(当前为60Hz)快-用于平滑动画签出
CADisplayLink
,或者只需将间隔设置为0.0167s,即1/60sLet’s查看您的
updatePos
method我添加了它-速度是一个随机整数-所有的R都是图像-ifDone()检查它们是否都已到达底部@KickimusButticus
func ifDone() {
    if (r1.center.y > 540) && (r2.center.y > 540) && (r3.center.y > 540) && (r4.center.y > 540) && (r5.center.y > 540) && (r6.center.y > 540) && (r7.center.y > 540) && (r8.center.y > 540) && (r9.center.y > 540) && (r10.center.y > 540) && (r11.center.y > 540) && (r12.center.y > 540) && (r13.center.y > 540) && (r14.center.y > 540) && (r15.center.y > 540) {

        moveDown.invalidate()
        ad += 0.1
        speed1 = ad + CGFloat(Float(arc4random()) / Float(UINT32_MAX))
        speed2 = ad + CGFloat(Float(arc4random()) / Float(UINT32_MAX))
        speed3 = ad + CGFloat(Float(arc4random()) / Float(UINT32_MAX))
        speed4 = ad + CGFloat(Float(arc4random()) / Float(UINT32_MAX))
        speed5 = ad + CGFloat(Float(arc4random()) / Float(UINT32_MAX))
        speed6 = ad + CGFloat(Float(arc4random()) / Float(UINT32_MAX))
        speed7 = ad + CGFloat(Float(arc4random()) / Float(UINT32_MAX))
        speed8 = ad + CGFloat(Float(arc4random()) / Float(UINT32_MAX))
        speed9 = ad + CGFloat(Float(arc4random()) / Float(UINT32_MAX))
        speed10 = ad + CGFloat(Float(arc4random()) / Float(UINT32_MAX))
        speed11 = ad + CGFloat(Float(arc4random()) / Float(UINT32_MAX))
        speed12 = ad + CGFloat(Float(arc4random()) / Float(UINT32_MAX))
        speed13 = ad + CGFloat(Float(arc4random()) / Float(UINT32_MAX))
        speed14 = ad + CGFloat(Float(arc4random()) / Float(UINT32_MAX))
        speed15 = ad + CGFloat(Float(arc4random()) / Float(UINT32_MAX))

        for x in r {
            x.center.y = 40
            x.center.x = CGFloat(20+arc4random_uniform(285))
        }


        moveDown = NSTimer.scheduledTimerWithTimeInterval(0.015, target:self, selector: Selector("updatePos"), userInfo: nil, repeats: true)

    }
}