animateWithKeyFrameAnimation在我的类的不同部分产生不同的结果

时间:2016-06-06 21:52:15

标签: ios swift animation uipangesturerecognizer

我正在尝试根据view.setSelected(true)制作视图动画。开始时,视图应随着用户的手指在x轴上移动并旋转。在视图移动了设定的数量后,它应该只是滑出屏幕。想象一张卡片从甲板上滑下来。

对于最后的滑动,我使用的是lstRoom.setItemChecked(position, true)。当我测试它时,我只是把它放在一个函数中并将它连接到UIPanGestureRecognizer。所以视图会用我的手指移动,然后只要我达到最大移动限制就停止。然后我会点击上面提到的按钮,视图将无缝地滑出屏幕。

然后我添加了#34;滑离屏幕"我的手势处理函数里面的动画代码。现在,视图从屏幕上闪烁,快速滑回原来的位置,然后动画关闭。我甚至尝试从手势处理程序中调用函数,我得到了相同的结果。

有人可以帮我理解这里发生了什么吗?我不明白为什么在一个地方调用代码会产生如此截然不同的结果。另外,我该如何解决?

代码

我正在移动animateWithKeyFrameAnimation而不移动视图以进行旋转点。

UIButton

这是anchorPoint被挂钩的功能。

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        movingView.layer.anchorPoint = CGPoint(x: 0.5, y: 0.9)
    }

    override func viewDidLayoutSubviews() {
        movingView.frame = CGRect(origin: CGPointZero, size: movingView.frame.size)
    }

这是一个功能,可以在离屏幕的其余部分激活视图。

gestureRecognizer

1 个答案:

答案 0 :(得分:0)

您正在移动视图,因为它正在制作动画并且正在弄乱动画。

你应该在动画时禁用panGesture。例如:

if  abs(totalMoved) >= totalMovedBeforeRemoving {
        recognizer.enabled = false
        finishAnimatingOffScreen(nil)
    }

然后在finishAnimatingOffScreen结束时说:

UIView.addKeyframeWithRelativeStartTime(0.01, relativeDuration: 4.99, animations :{
                let moveOffScreenTransform = CGAffineTransformMakeTranslation(xToMove, 0)
                let rotateTransform = CGAffineTransformMakeRotation(-CGFloat(M_PI / 12))
                self.movingView.transform = CGAffineTransformConcat(moveOffScreenTransform, rotateTransform)
            })


              }, completion:{ _ in
                   self.panGesture.enabled = true
          })

我会说在使用自动布局时更新约束而不是帧是一个很好的重击规则。