gpt4 book ai didi

iphone - UIView Animation 中的 Alpha 变化没有效果,在 UIView Animation 之外很好

转载 作者:行者123 更新时间:2023-11-29 13:25:09 24 4
gpt4 key购买 nike

我发现至少有 5 个其他“UIView 动画不起作用”问题,我不想再添加一个。 :(。我确定这不是 alpha 特有的东西。backgroundColor 也有同样的问题。所以它是一些基本的东西。

这个有效:

        [self.view viewWithTag:kPlayView].alpha = 0.75;
[self.view viewWithTag:kCancelView].alpha = 0.75;
[self.view viewWithTag:kTapViewTag].backgroundColor = [UIColor whiteColor];

这不(它什么都不做):

 //kPlayView and kCancelView are subviews of kTapViewTag  
[UIView animateWithDuration:2.0 animations:^{
[self.view viewWithTag:kPlayView].alpha = 0.75;
[self.view viewWithTag:kCancelView].alpha = 0.75;
[self.view viewWithTag:kTapViewTag].backgroundColor = [UIColor whiteColor];

} ];

为什么?这在 kTapViewTag View 的手势处理程序中调用。它是带有 backgorundColor = [UIColor clearColor] 的 View ,我想淡化为白色并将 subview 的 alpha 更改为 0.75 以响应点击手势。

更新:

反之亦然。这有效:

       [UIView animateWithDuration:2.0 animations:^{
[self.view viewWithTag:kPlayView].alpha = 0;
[self.view viewWithTag:kCancelView].alpha = 0;
[self.view viewWithTag:kTapViewTag].backgroundColor = [UIColor clearColor];
}];

我能够在没有动画的情况下显示充当“暂停/恢复”的 View ,然后为淡出设置动画。只要我不尝试为淡入设置动画,这就会来回工作。

更新 2

这里是整个实现供引用。这里有东西吗? (我看过太多次了)。

- (void)didTap:(id)selector
{

isPaused = (isPaused) ? NO: YES;

[self.view viewWithTag:kPlayView].userInteractionEnabled = isPaused;
[self.view viewWithTag:kCancelView].userInteractionEnabled = isPaused;

if (isPaused)
{

[self pauseLayer:self.view.layer];
[timer1 invalidate];
[timer2 invalidate];

[UIView animateWithDuration:2.0 animations:^{
[self.view viewWithTag:kPlayView].alpha = 0.75;
[self.view viewWithTag:kCancelView].alpha = 0.75;
[self.view viewWithTag:kTapViewTag].backgroundColor = [UIColor whiteColor];
} ];
}
else
{
isPaused = NO;

[UIView animateWithDuration:2.0 animations:^{
[self.view viewWithTag:kPlayView].alpha = 0;
[self.view viewWithTag:kCancelView].alpha = 0;
[self.view viewWithTag:kTapViewTag].backgroundColor = [UIColor clearColor];
}];

[self resumeLayer:self.view.layer];
[self animateNotification];
}
}

更新 3

- (void)pauseLayer:(CALayer*)layer
{
CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
layer.speed = 0.0;
layer.timeOffset = pausedTime;
}

- (void)resumeLayer:(CALayer*)layer
{
CFTimeInterval pausedTime = [layer timeOffset];
layer.speed = 1.0;
layer.timeOffset = 0.0;
layer.beginTime = 0.0;
CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
layer.beginTime = timeSincePause;
}

最佳答案

UIView 动画是 Core Animation 的一个很好的高级包装器,它使用您的 View 层渲染其动画。通过将图层速度设置为 0,您可以有效地停止 uiview 动画的启动。

当你再次开始图层时间时,你会从它停止的地方重新开始。暂停之前和之后的动画合并在一起,没有任何反应。

当您不设置动画时,动画在另一个方向工作的原因是动画设置和触发的方式。当您调用 [UIView animate... 时,它会在图层上设置一个低级动画,其中包含开始时间和结束时间等。您编写的代码会立即完成,动画将在运行循环的下一次运行时开始。然而,在让一切恢复之前,您还恢复了图层的时间和速度,因此在制作动画时,一切都照常进行。

我猜你不是想像这样暂停层。必须有更好的方法来删除和停止动画。例如使用 UIView 您只需再次为属性设置动画,它就会停止,使用 CALayer 您可以使用 removeAllAnimationsremoveAnimationForKey: 以及您可以研究使用 -[CALayer presentationLayer] 找出特定层在动画中特定点在屏幕上的位置,然后调整实际层值以匹配。

关于iphone - UIView Animation 中的 Alpha 变化没有效果,在 UIView Animation 之外很好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13314136/

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