gpt4 book ai didi

ios - 做CABeginAnimation时如何正确设置模型

转载 作者:行者123 更新时间:2023-12-01 16:28:36 25 4
gpt4 key购买 nike

我有一个 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只是更改表示层,而不是实际模型。我也读过使用 fillModeremovedOnCompletion是不好的做法,因为它会导致模型与用户看到的不一致。因此,我尝试使用以下行更改模型:
self.imageView.layer.borderWidth = self.isSelected ? 4.0 : 0.0;

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

那么有没有什么方法可以在没有 performSelector 的情况下平滑地为边框设置动画? ?

任何帮助是极大的赞赏。

最佳答案

这是我不久前制作的 CABasicAnimation 示例:

-(void) animateProgressFrom:(CGFloat)fromValue to:(CGFloat)toValue
{
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"opacity"];
animation.fromValue = @(fromValue);
animation.toValue = @(toValue);
animation.duration = ABS(toValue - fromValue)*3.0;
[self.layer addAnimation:animation forKey:@"opacity"];

[CATransaction begin];
[CATransaction setDisableActions:YES];
self.layer.opacity = toValue;
[CATransaction commit];
}

我认为您需要的是图层动画末尾的 CATransaction 。

关于ios - 做CABeginAnimation时如何正确设置模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33662683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com