我有一个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
只是更改表示层,而不是实际模型。我还读到使用fillMode
和removedOnCompletion
是不好的做法,因为它会导致模型与用户看到的内容之间的不一致。所以,我尝试使用以下行更改模型:
self.imageView.layer.borderWidth = self.isSelected ? 4.0 : 0.0;
问题是,这条线似乎是直接设置属性,所以当动画开始播放时,边框宽度已经达到了它想要的值。我已经尝试在代码的开头,结束和中间的任何地方坚持这一行,但没有成功。我确实找到了一个hacky解决方案:我没有设置属性,而是将属性设置器传递给performSelector: withObject: afterDelay:
,延迟是动画的持续时间。这在大多数情况下都有效,但有时候周期并不完全匹配,动画将先运行,然后跳回原始状态,然后它会捕捉到新状态,大概是{{1 }}
那么有没有办法在没有performSelector
的情况下平滑地设置边框动画?
非常感谢任何帮助。