同一动画块中的两个属性更改具有不同的持续时间。为啥?

Posted

技术标签:

【中文标题】同一动画块中的两个属性更改具有不同的持续时间。为啥?【英文标题】:Two property changes in the same animation block have different durations. Why?同一动画块中的两个属性更改具有不同的持续时间。为什么? 【发布时间】:2010-10-21 15:01:58 【问题描述】:

在下面的UIView 动画块中,我做了一个CGAffineTransformMakeScale 和一个CGAffineTransformMakeRotation,虽然duration 设置为1.0f,,但比例真的很快,旋转就像它一样在1 秒内完成应该。

这一定是我对AffineTransforms的应用方式缺乏了解,但我想不通。

什么给了?

编辑:弗拉基米尔的回答效果很好。我将同一个属性更改了两次,而不是更改了两个属性。要对transform 属性进行两次更改,您必须使用初始更改进行transform,然后将第二次更改添加到transform,然后从那里设置对象的transform。通过这种方式,您可以将任意数量的链接链接在一起。


CGColorRef color = [[colorArray objectAtIndex:colorIndex] CGColor];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1.0f];
[[self layer] setFillMode:kCAFillModeForwards];
[self setTransform:CGAffineTransformMakeScale(2.0, 2.0)];
[self setTransform:CGAffineTransformMakeRotation(M_PI / 4)];
[[self layer] setBackgroundColor:color];
[UIView commitAnimations];

【问题讨论】:

【参考方案1】:
[self setTransform:CGAffineTransformMakeScale(2.0, 2.0)];
[self setTransform:CGAffineTransformMakeRotation(M_PI / 4)];

第二行覆盖第一行的效果。您应该构建整个转换,然后将其应用于您的视图:

CGAffineTransform tr = CGAffineTransformMakeScale(2.0f,2.0f);
tr = CGAffineTransformRotate(tr, M_PI/4);
[self setTransform: tr];

【讨论】:

以上是关于同一动画块中的两个属性更改具有不同的持续时间。为啥?的主要内容,如果未能解决你的问题,请参考以下文章

隐藏属性不能在动画块内更改

在动画期间更改 jQuery 的动画持续时间

为啥 librosa 库中的频谱图具有不同的实际音轨持续时间?

为啥在 oracle SQL 中,在条件相差很大的情况下,对同一列执行具有两个不同值的查询所花费的时间

请问css给图片添加动画,会动态更改图片的定位top与left吗?

iOS中的显示动画(属性动画)