iOS的动画对象回到原来的位置
问题描述:
我想在一个按钮上点击CABasicAnimation动画UIView对象的位置。对象动画并移动到“到”位置,但在动画结束后返回到原始位置。即使在动画结束后,我也想保留视图对象的位置。这是执行动画的代码片段。 viewObject是我试图动画的对象。iOS的动画对象回到原来的位置
let animation = CABasicAnimation(keyPath: "position")
animation.timingFunction = CAMediaTimingFunction(controlPoints: 0.86, 0, 0.07, 1.0)
animation.duration = 0.5
animation.fromValue = NSValue(cgPoint: CGPoint(x: viewObject.center.x, y: viewObject.center.y))
animation.toValue = NSValue(cgPoint: CGPoint(x: viewObject.center.x + 64, y: viewObject.center.y))
viewObject.layer.add(animation, forKey: "position")
答
添加以下行请添加以下代码:
目标C:
animation.fillMode = kCAFillModeForwards;
animation.removedOnCompletion = NO;
斯威夫特3:
animation.isRemovedOnCompletion = false
animation.fillMode = kCAFillModeForwards
答
UIView.animateWithDuration(0.7, delay: 1.0, options: .CurveEaseOut, animations:
{
Code
}, completion:
{
finished in
println("Nothing to do!")
})
只是做动画块内,当它完成。保持这一立场,不要恢复原状。它应该留在相同的位置
,往其中加这行代码 cabasicanimation.removedOnCompletion = false;
这条线将使它不回去在相同的状态添加动画
animation.isRemovedOnCompletion = false
animation.fillMode = kCAFillModeForwards
+0
这是旧的语法。在回答之前至少检查一次。 –
答
前
答
我认为你需要在完成再给框架。所以,这可能是一个不错的方法
UIView.animate(withDuration: 0.7, delay: 1.0, options: .curveLinear, animations: {
let animation = CABasicAnimation(keyPath: "position")
animation.timingFunction = CAMediaTimingFunction(controlPoints: 0.86, 0, 0.07, 1.0)
animation.duration = 0.5
animation.fromValue = NSValue(cgPoint: CGPoint(x: self.viewObject.center.x, y: self.viewObject.center.y))
animation.toValue = NSValue(cgPoint: CGPoint(x: self.viewObject.center.x + 64, y: self.viewObject.center.y))
self.viewObject.layer.add(animation, forKey: "position")
}, completion: { finished in
self.viewObject.frame.origin.x = self.viewObject.frame.origin.x + 64
})
试试这个。它会很好地工作
animation.fillMode = kCAFillModeForwards; animation.removedOnCompletion = NO; –
请试试这个 –
这解决了这个问题。但我不清楚为什么我应该设置fillMode属性。 – SarwanKumr