更改UIView的框架不能正常工作

时间:2017-05-17 05:41:27

标签: ios swift animation uiview frame

我有一个小问题,我无法理解为什么会发生这种情况。

我有一个自定义的NavigationView。我的要求是在点击谷歌地图时更改此NavigationView的框架。我的意思是我必须用动画显示和隐藏(切换)框架。

以下是我的代码: -

func mapView(_ mapView: GMSMapView, didTapAt coordinate: CLLocationCoordinate2D) {

    if false == boolTapOnNavigationView {

        UIView.animate(withDuration: 0.5, animations: {

               self.viewNavigation.frame = CGRect(x: 0, y: -100, width: self.view.frame.width, height: 60)
               //self.viewNavigation.isHidden = true
        })
        boolTapOnNavigationView = true
    }

    else {

        UIView.animate(withDuration: 0.5, animations: {
            //self.viewNavigation.isHidden = false
            self.viewNavigation.frame = CGRect(x: 0, y: 20, width: self.view.frame.width, height: 60)
        })
        boolTapOnNavigationView = false
    }
}

在我的代码中你可以看到我有一个名为'boolTapOnNavigationView'的标志。

如果我点击谷歌地图,但是当我点击同一个ViewController中的任何其他按钮时,该代码工作正常,那么NavigationView的帧会自动反映。

1 个答案:

答案 0 :(得分:0)

你应该改变中心而不是框架

   func mapView(_ mapView: GMSMapView, didTapAt coordinate: CLLocationCoordinate2D) {

        if false == boolTapOnNavigationView {

            UIView.animate(withDuration: 0.5, animations: {

                   self.viewNavigation.centre.y = self.viewNavigation.centre.y - 100
                   //self.viewNavigation.isHidden = true
            })
            boolTapOnNavigationView = true
        }

        else {

            UIView.animate(withDuration: 0.5, animations: {
                //self.viewNavigation.isHidden = false
                self.viewNavigation.centre.y = self.viewNavigation.centre.y + 20
            })
            boolTapOnNavigationView = false
        }
    }