如何在执行CABeginAnimation时正确设置模型

时间:2015-11-12 00:56:16

标签: ios iphone animation calayer cabasicanimation

我有一个UIImageView当用户点击它时,4点的边框可以打开和关闭。我试图按照以下方式对边框进行动画制作:

CABasicAnimation *widthAnimation = [CABasicAnimation animationWithKeyPath:@"borderWidth"];
widthAnimation.toValue = self.isSelected ? @4.0 : @0.0;
widthAnimation.duration = 0.1;
[self.imageView.layer addAnimation:widthAnimation forKey:@"borderWidth"];

现在,正如我从研究和搜索SO中学到的那样,CABasicAnimation只是更改表示层,而不是实际模型。我还读到使用fillModeremovedOnCompletion是不好的做法,因为它会导致模型与用户看到的内容之间的不一致。所以,我尝试使用以下行更改模型:

self.imageView.layer.borderWidth = self.isSelected ? 4.0 : 0.0;

问题是,这条线似乎是直接设置属性,所以当动画开始播放时,边框宽度已经达到了它想要的值。我已经尝试在代码的开头,结束和中间的任何地方坚持这一行,但没有成功。我确实找到了一个hacky解决方案:我没有设置属性,而是将属性设置器传递给performSelector: withObject: afterDelay:,延迟是动画的持续时间。这在大多数情况下都有效,但有时候周期并不完全匹配,动画将先运行,然后跳回原始状态,然后它会捕捉到新状态,大概是{{1 }}

那么有没有办法在没有performSelector的情况下平滑地设置边框动画?

非常感谢任何帮助。

0 个答案:

没有答案