动画不执行

时间:2015-04-07 11:06:14

标签: ios swift animation uiview mkmapview

我想在按钮操作上更改mapView的大小,所以我有两个函数来执行此操作。

func makeFullScreenMap() {
    println(self.heightConstraint.constant)
    self.heightConstraint.constant = self.tableView.frame.height
    println(self.heightConstraint.constant)
    self.mapView.setNeedsUpdateConstraints()
    UIView.animateWithDuration(5, animations: { () -> Void in
        self.mapView.layoutIfNeeded()
    })

}

func makeHideScreenMap() {

    self.heightConstraint.constant = 0
    self.mapView.setNeedsUpdateConstraints()
    UIView.animateWithDuration(5, animations: { () -> Void in
        self.mapView.layoutIfNeeded()
    })
}

否则,我有行动,我正在跟踪按钮状态并选择我需要使用的确切方法。

  @IBAction func fullScreen(sender: AnyObject) {

        println(changeMapButton.state.rawValue)

        if changeMapButton.state == UIControlState.Highlighted {
            makeFullScreenMap()
            changeMapButton.selected = true

        } else {
            changeMapButton.highlighted = true
            makeHideScreenMap()
        }

    }

问题是 - 当它动画下来时,它会使动画变为动画并慢慢使mapView更大。当我使用方法makeHideScreenMap()时,它会瞬间改变,然后滚动地图视图动画。我需要它做慢慢动画像改变框架。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

您应该在动画块中用self.mapView.layoutIfNeeded()替换self.view.layoutIfNeeded(),因为您布局的约束是视图的子视图而不是mapView。

答案 1 :(得分:0)

尝试使用此动画制作动画。请根据您的需要管理坐标。

let trans = CGAffineTransformScale(mapView.transform, 1.00, 1.00)
UIView .animateWithDuration(0.5, delay: 0.0, options: UIViewAnimationOptions.CurveEaseInOut, animations: {

        self. mapView.transform = CGAffineTransformScale(self. mapView.transform, 100.0, 100.0)

        }, completion: {
            (value: Bool) in
    })