我正在尝试根据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
答案 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
})
我会说在使用自动布局时更新约束而不是帧是一个很好的重击规则。