Objective c 在设置帧更改动画后使用变换缩放UIView会导致UIView在缩放之前跳回原始帧
我尝试在移动UIView(使用动画)后缩放它(使用动画)。问题是,当缩放动画开始时,它会跳回原始位置。为什么?Objective c 在设置帧更改动画后使用变换缩放UIView会导致UIView在缩放之前跳回原始帧,objective-c,ios,uiviewanimation,cgaffinetransform,Objective C,Ios,Uiviewanimation,Cgaffinetransform,我尝试在移动UIView(使用动画)后缩放它(使用动画)。问题是,当缩放动画开始时,它会跳回原始位置。为什么? [UIView animateWithDuration:t delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{ // Drop the ball CGRect frame = coinView.frame; frame.origin.y += d; coinView.frame
[UIView animateWithDuration:t delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{
// Drop the ball
CGRect frame = coinView.frame;
frame.origin.y += d;
coinView.frame = frame;
coinView.shouldSparkle = NO;
} completion:^(BOOL finished) {
[UIView animateWithDuration:0.3 animations:^{
// Initial scale up for ball "poof"
coinView.transform = CGAffineTransformScale(coinView.transform, 1.5, 1.5);
} completion:^(BOOL finished) {
[UIView animateWithDuration:0.3 animations:^{
coinView.transform = CGAffineTransformScale(coinView.transform, 0.000001, 0.000001);
} completion:^(BOOL finished) {
[coinView removeFromSuperview];
}];
}];
}];
编辑:这是我如何生成我的d:
static CGFloat groundPositionY = 325;
CGRect convertedFrame = [coinView.superview convertRect:coinView.frame toView:self.view];
CGFloat d = groundPositionY - CGRectGetMaxY(convertedFrame);
EDIT2:好的,所以我将第二个UIView动画更改为以下内容,我发现在第二个动画出现之前,即当调用animateWithDuration:delay:options:animations:completion:时,会发生跳跃(和缩放)
[UIView animateWithDuration:5 delay:3 options:0 animations:^{
coinView.transform = CGAffineTransformScale(coinView.transform, 1.5, 1.5);
} completion:nil];
我测试了你的代码,对我来说效果很好。你如何生成你的d?它到底在哪个街区返回?我发现了问题 coinView是子视图控制器视图的子视图。问题来自这样一个事实,即我覆盖了子视图控制器的
viewdilayoutsubview
方法来布局所有coinView
,因此每当调用该方法时,coin视图都会移回子视图控制器预期的原始位置和大小
谢谢你们的帮助,雷普盖伊和塞尔吉奥 是否尝试删除第二个和第三个动画,并检查视图是否保持其位置?你在这段代码之外(我的意思是,在它之后)对视图做了什么吗?是的,我做了,它做了。不,在这段代码之后,我不会涉及这些视图(或任何相关视图)代码>而不是帧更改,然后它也会做一些奇怪的事情(它会在y方向将其移动-d,然后在y方向将其设置为正,直到它到达原始位置)您认为coinView的层内容设置为CGImage是否重要?编辑:我将其更改为UIImageView子视图,但没有任何更改。在xib或情节提要中是否启用了自动布局?实际上,我不确定它是否返回到原始位置,但它肯定会跳转到其他位置。有关d的问题,请参见我的编辑。当第二个动画块启动时,它会跳转。我使用的代码与您相同,无法复制您得到的错误。我使用的是一个按钮,但这并不重要,因为它仍然是UIView,它会慢慢下降,然后放大和缩小。是否确实不将视图从动画块外部移动到某个位置?由于视图立即处于上一个动画指定的位置,最终用户只需花费时间即可看到动画。非常确定。另外,我刚刚修复了一个错误
uiviewmanimationcurveeasein
应该是uiviewmanimationoptioncurveeasein
…但这仍然无法修复它=(然后我不知道怎么回事。最后,我会用不同的视图检查同一个动画,如按钮或标签,甚至是在动画之前创建的图像视图。如果旧视图不能按预期工作,如何创建它?每次对新视图应用一个函数,然后看看发生了什么