我在视图中间添加了ImageView
(没有设置约束)。
使用此代码,我想将此ImageView
从原始位置移动到新位置。
不幸的是,它从新的位置转移到原来的位置 - 为什么?
let opts = UIViewAnimationOptions.CurveEaseInOut
UIView.animateWithDuration(1, delay: 0, options: opts, animations: {
self.ivSun.center.x += 100
}, completion: nil)
答案 0 :(得分:1)
完成动画后添加此内容。
self.ivSun.layer.position = self.ivSun.layer.presentationLayer().position
我有在我的游戏中实现的代码。
CATransaction.begin()
CATransaction.setCompletionBlock { () -> Void in
self.viewBall.layer.position = self.viewBall.layer.presentationLayer().position
}
}
var animation = CABasicAnimation(keyPath: "position")
animation.duration = ballMoveTime
animation.fromValue = NSValue(CGPoint: viewBall.layer.presentationLayer().position)
animation.toValue = NSValue(CGPoint: CGPointMake(self.borderRight, self.borderMiddle))
animation.removedOnCompletion = false
animation.fillMode = kCAFillModeForwards
viewBall.layer.addAnimation(animation, forKey: "transform")
CATransaction.commit()
根据需要更改位置值。
答案 1 :(得分:0)
试试这个。
func animateImage()
{
UIView.animateWithDuration(3.0, delay: 0.0, options: UIViewAnimationOptions.CurveLinear, animations: { () -> Void in
self.imageView.center = CGPointMake(self.imageView.center.x+10, self.imageView.center.y+10)
}, completion: nil)
}
答案 2 :(得分:0)
如果不了解更多有关上下文和相关代码的信息,很难给出答案"为什么"它会抢回原来的位置,但作为替代方案,您可以将完成处理程序设置为最终位置/坐标。
通常我在我的小部件/视图上使用约束,并且我为它们的值设置动画(例如,与动画小部件框架相比)......具有出色的结果。
答案 3 :(得分:0)
这是由于自动布局造成的。需要在动画中更改和更新约束,如下所示:
- (IBAction)moveAction:(id)sender {
self.spaceConstraint.constant += 220;
[UIView animateWithDuration:0.5 animations:^{
[self.imageView layoutIfNeeded];
}];
}
答案 4 :(得分:-2)
var animation = CABasicAnimation(keyPath: "position")
animation.duration = ballMoveTime
animation.fromValue = NSValue(CGPoint: viewBall.layer.presentationLayer().position)
animation.toValue = NSValue(CGPoint: CGPointMake(self.borderRight, self.borderMiddle))
animation.removedOnCompletion = false
animation.fillMode = kCAFillModeForwards
viewBall.layer.addAnimation(animation, forKey: "transform")
CATransaction.commit()