【发布时间】:2012-11-09 18:51:15
【问题描述】:
我发现至少 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 视图的手势处理程序中调用。这是backgorundColor = [UIColor clearColor] 的视图,我想淡化为白色并将子视图的 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];
}];
我能够在没有动画的情况下显示充当“暂停/恢复”的视图,然后为淡出设置动画。只要我不尝试对淡入进行动画处理,这就会来回工作。
更新 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;
}
【问题讨论】:
-
运行动画块时会发生什么?屏幕上有什么变化吗?
-
感谢jackslash。绝对没有任何反应,没有明显的变化。但是附加了 UITapGestureRecognizer (kTapViewTap) 的视图不再响应点击。查看更新了解更多信息。
-
我使用此处提供的信息设置了一个示例项目,但我无法复制您的问题。只要您的标签常量是唯一的,上面的代码就是正确的。
-
有意见的渠道不是更好吗?通过标签查找视图是如此...脆弱
-
再次感谢,我更新了整个实现而不是摘录。我在某处错过了大局。邮件层上的动画使用 Apple 技术暂停,这似乎是一个危险信号,但在第二个动画中也是如此,即有效的动画。
标签: iphone ios uiview uiviewanimation