iOS动画故障,Y坐标问题

时间:2016-04-28 11:45:15

标签: ios iphone swift uiview uiviewanimation

几个小时以来,我一直试图解决最小的动画故障。我的代码成功地将视图移出屏幕,然后将其重新设置为动画。它使x协调正确,但Y轴具有我不理解的行为。这是代码:

func listTrans_slideIn (slideFrom: String) {
    //var newFrame = tableView.frame
    tableView.frame.origin.x = 1000
    //tableView.frame.origin.y = 100
    print("Table pushed to side")

    UIView.animateKeyframesWithDuration(1.375 /*Total*/, delay: 0.0, options: UIViewKeyframeAnimationOptions.CalculationModeLinear, animations: {
        UIView.addKeyframeWithRelativeStartTime(0.0, relativeDuration: 1/1, animations:{
            self.tableView_toTLG_Top.constant = 130
            self.tableView_toSV_Left.constant = 0
            self.tableView_toSV_Right.constant = 0
            self.setupView()

            //newFrame.origin.y = self.hdrBox.frame.height+50
            //newFrame.origin.x = 0
            //self.tableView.frame = newFrame

            self.tableView.layoutIfNeeded()
        })
        },
        completion: { finished in
            if (!finished) { return }

        })
}

奇怪的行为是,如果我将正确的y坐标放在动画关键帧中,它会过高,但会在正确的坐标处稳定下来。如果我输入一个太低的y坐标,它会在正确的高度进入,但然后稳定得太低。

正如您所看到的,我尝试过使用框架和约束。我试过改变屏幕移动的高度,但这似乎没有效果。

任何人都知道为什么我花了半天时间看到这个错误?

2 个答案:

答案 0 :(得分:0)

你可以尝试这样的事情:

  // Use the same value here and below, it moves it out of the screen
        self.tableView.center.y -= 500

 UIView.animateWithDuration(1.0, animations: { () -> Void in

       // Then it comes back 
           self.tableView.center.y += 500
    })

答案 1 :(得分:0)

这结果是一个操作顺序问题。解决方案要求我将动画移动到viewDidAppear中。

其他说明:

  • 要使动画看起来尽可能流畅,请考虑关闭segue的动画。
  • 还要确保您在主线程中运行segue调用和动画,以便一切顺利且无延迟地发生