UIView动画,如何让它流畅?

时间:2014-08-21 05:03:35

标签: ios xcode animation uiview

我尝试实现简单动画来更改视图位置我使用此代码:

[UIView animateWithDuration:0.4 animations: ^{
self.greenIm.frame = CGRectMake(self.roundView.frame.origin.x, self.roundView.frame.origin.y -   110, 60, 60);
 self.greenIm.layer.cornerRadius = self.greenIm.frame.size.height / 2;
}

但是我所看到的,我的圆形视图self.green我没有四舍五入到新的位置,只是在最后保持圆润,看起来很糟糕。

后来我想要改变另一个View的大小,但我需要相同的中心:

[UIView animateWithDuration:0.4 animations: ^{
self.cup.frame = CGRectMake(self.cup.frame.origin.x, self.cupImage.frame.origin.y, self.cup.frame.size.width - 20, self.cup.frame.size.height - 20);
self.cup.center = self.centerPoint;
}

在这里,我看到相同的,第一个视图更改大小稍后居中。

如何解决?我如何理解UIView动画动画所有属性不是一次性的。请帮忙。

1 个答案:

答案 0 :(得分:1)

对于您的第一个问题,Apple文档说您可以为可动画的属性设置动画。

  

包含提交视图的更改的块对象。这是您以编程方式更改视图层次结构中视图的任何可动画属性的位置。该块不带参数,也没有返回值。此参数不能为NULL。

如果您看到 UIView 属性的文档,您会发现图层不可动画。您需要使用Core Animation来实现此目的。使用以下代码。我在这个示例代码中使用 UILabel 。看看这是否有帮助。

  CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"cornerRadius"];
  [anim setFromValue:[NSValue valueWithNonretainedObject:[NSNumber numberWithDouble:10.0]]];
  lblView.layer.cornerRadius = 30.0; 
  [anim setDuration:6];
  [lblView.layer addAnimation:anim forKey:@"move"];

以同样的方式,您可以为 position 属性创建另一个动画对象,并根据需要更改框架。将该动画添加到图层,两个动画将并行启动。