swift:timer(每秒)+ gestureRecognizer使GUI崩溃

时间:2015-10-19 16:25:21

标签: swift user-interface timer crash uigesturerecognizer

我有一个简单的gestureRecognizer。当手势为“向上”时,菜单向上滑动。 “DOWN”:菜单向下滑动。这很有效。

我也有一个计时器。它每秒只计算一个数字++。这也有效。但是计时器一起崩溃我的GUI。 动画正确启动,但当计时器调用我的计数器方法时,它会跳回原点GUI。

那是什么问题?我没有在谷歌找到任何东西,但我认为我搜索了错误的单词。 (英语不是我的母语,在德语中没有太多的文献......)

以下是我的代码片段:

class ViewController: UIViewController, MKMapViewDelegate{

@IBOutlet weak var swipe: UILabel!
var number: Int = 0

@IBOutlet weak var menuView: UIView!

override func viewDidLoad() {
    super.viewDidLoad()

    var topSwipe = UISwipeGestureRecognizer(target: self, action: Selector("handleSwipes:"))
    var downSwipe = UISwipeGestureRecognizer(target: self, action: Selector("handleSwipes:"))

    topSwipe.direction = .Up
    downSwipe.direction = .Down

    view.addGestureRecognizer(topSwipe)
    view.addGestureRecognizer(downSwipe)

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

}

func counter() {
    number++
    swipe.text = "\(number)"
}

func handleSwipes(sender:UISwipeGestureRecognizer) {

    if (sender.direction == .Up) {
        print("TOP")

            var menuPosition = CGPointMake(self.menuView.frame.origin.x, self.menuView.frame.origin.y - 100.0)

            UIView.animateWithDuration(0.65, animations: {
                self.menuView.frame = CGRectMake(menuPosition.x,menuPosition.y,self.menuView.frame.size.width,self.menuView.frame.size.height)
                })


    }

    if (sender.direction == .Down) {
            menuChoose = true
            UIView.animateWithDuration(0.65, animations: {

            var menuPosition = CGPointMake(self.menuView.frame.origin.x, self.menuView.frame.origin.y + 100.0)
        self.menuView.frame = CGRectMake(menuPosition.x,menuPosition.y,self.menuView.frame.size.width,self.menuView.frame.size.height)
            })
    }

  }   
}

我试图锁定计时器。所以当手势开始时,只需计算数字而不用swipe.text =“(number)” 动画结束,但在“解锁”后,GUI跳回原点。

感谢您提供一些我可以搜索的codenippets或关键字:)

1 个答案:

答案 0 :(得分:0)

似乎无论何时设置了UILabel text属性,它都会重新绘制视图,从而重置menuView的位置(也许有人可以详细说明"为什么"在评论中)。如果使用自动布局约束来操纵menuView的位置,则可以正常工作。您可以通过设置spaceConstraint.constant += 100spaceConstraint.constant -= 100然后调用

来完成此操作
UIView.animateWithDuration(0.65, animations: {
    self.view.layoutIfNeeded()
})