Swift:计时器重置视图

时间:2015-04-30 07:37:07

标签: ipad swift timer constraints reload

所以我有一个标签,使用NSTimer每秒计数1。我创建了一个有一些移动UIImage的应用程序。但是,每次计时器计数一次时,视图似乎重新加载,UIImage s返回其原始位置。此外,UIImage不是我将它们放在故事板中的位置(我将它们放在视图之外,这样它们就可以向内移动,但是当我启动应用程序时,它只是在那里显示它们。它们只是移动但是只有一秒钟,然后回到原来的位置)。相同的代码在iPhone上工作正常,但在iPad上无法正常工作。我认为它与约束有关,因为代码是相同的。这是计时器代码:

 func counting() {

    timerCount = timerCount + 1
    timerLabel.text = "\(timerCount)"


}


override func viewDidLoad() {

    super.viewDidLoad()

    timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("counting"), userInfo: nil, repeats: true)

    // Do any additional setup after loading the view, typically from a override nib.
}

这是移动我的UIImages的代码:

func MoveWalls() {


    FirstTimer = NSTimer.scheduledTimerWithTimeInterval(0.07, target: self, selector: Selector("FirstMoving"), userInfo: nil, repeats: true)

    SecondTimer = NSTimer.scheduledTimerWithTimeInterval(0.007, target: self, selector:
        Selector("SecondMoving"), userInfo: nil, repeats:true)

    ThirdTimer = NSTimer.scheduledTimerWithTimeInterval(0.006, target: self, selector:
        Selector("ThirdMoving"), userInfo: nil, repeats:true)

    FourthTimer = NSTimer.scheduledTimerWithTimeInterval(0.005, target: self, selector:
        Selector("FourthMoving"), userInfo: nil, repeats:true)
}

func FirstMoving() {
    First.center = CGPointMake(First.center.x + 1, First.center.y)
    }
func SecondMoving() {
    Second.center = CGPointMake(Second.center.x - 1, Second.center.y)
    }
func ThirdMoving() {
    ThirdMoving.center = CGPointMake(Third.center.x, Third.center.y + 1)
    }
func FourthMoving() {
    Fourth.center = CGPointMake(Fourth.center.x, Fourth.center.y  1)
    }

我的约束:

开始和结束游戏的两个按钮(水平居中)。

四个UIImages(尺寸比率)

计时器(左上角),由于某种原因,每次计数都会重置视图。

1 个答案:

答案 0 :(得分:0)

我遇到了完全相同的问题。我通过为每个可移动视图添加此代码来解决它:

override func viewDidLoad() {
    super.viewDidLoad()
    self.imageView.translatesAutoresizingMaskIntoConstraints = true
    self.imageView2.translatesAutoresizingMaskIntoConstraints = true
}