【发布时间】:2016-02-13 06:14:51
【问题描述】:
我有一个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"];
现在,正如我从研究和搜索中了解到的那样,CABasicAnimation 只是更改了表示层,而不是实际模型。我还读到使用fillMode 和removedOnCompletion 是不好的做法,因为它会导致模型与用户看到的不一致。因此,我尝试使用以下行更改模型:
self.imageView.layer.borderWidth = self.isSelected ? 4.0 : 0.0;
问题是,这条线似乎直接设置了属性,所以当动画开始时,边框宽度已经达到了它的期望值。我试过在代码的开头、结尾和中间的任何地方都坚持这一行,但没有成功。我确实设法找到了一个 hacky 解决方案:我没有设置属性,而是将属性设置器传递给performSelector: withObject: afterDelay:,延迟是动画的持续时间。这在大多数情况下都有效,但有时循环不完全匹配,动画会先运行,然后跳回原始状态,然后捕捉到新状态,大概是 performSelector 的结果
那么有没有办法在没有performSelector 的情况下平滑地为边框设置动画?
非常感谢任何帮助。
【问题讨论】:
标签: ios iphone animation calayer cabasicanimation