UIView.animateWithDuration:动画始终停在原始位置

时间:2015-07-09 09:21:04

标签: ios swift cocoa-touch animation uiimageview

我在视图中间添加了ImageView(没有设置约束)。

使用此代码,我想将此ImageView从原始位置移动到新位置。

不幸的是,它从新的位置转移到原来的位置 - 为什么?

let opts = UIViewAnimationOptions.CurveEaseInOut
UIView.animateWithDuration(1, delay: 0, options: opts, animations: {
     self.ivSun.center.x += 100
}, completion: nil) 

5 个答案:

答案 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()