我正在尝试设置一个图像库类型视图,其中图像几乎全屏,导航控制器,工具栏,按钮(在图像之间移动)和滑块(在图像之间快速移动)都淡出在没有互动的时期之后,然后在水龙头上返回。到目前为止我所拥有的(我确信它甚至没有接近正确的方式,我是一个初学者)是这样的:
-(void)fadeOutViews{
[self fadeOutView:rightButton];
[self fadeOutView:leftButton];
[self fadeOutView:mySlider];
mySlider.enabled = NO;
[self fadeOutView:myToolbar];
[self fadeOutView:self.navigationController.navigationBar];
}
-(void)fadeOutView:(UIView *)view{
view.alpha = 1;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationDelegate:self];
[UIView setAnimationDuration:2];
view.alpha = 0;
[UIView commitAnimations];
}
-(void)stopFadeOut{
[rightButton.layer removeAllAnimations];
[leftButton.layer removeAllAnimations];
[mySlider.layer removeAllAnimations];
[myToolbar.layer removeAllAnimations];
[self.navigationController.navigationBar.layer removeAllAnimations];
}
-(void)resetToInitialConfigurationWithDelay:(int)delay{
if (buttonWasPressed){
delay = 4;
buttonWasPressed = NO;
}
rightButton.alpha = 1;
leftButton.alpha = 1;
mySlider.alpha = 1;
myToolbar.alpha = 1;
self.navigationController.navigationBar.alpha = 1;
mySlider.enabled = YES;
[self stopFadeOut];
[self performSelector:@selector(fadeOutViews) withObject:nil afterDelay:delay];
}
所以,理论上,你重置到初始状态(延迟是因为图像在使用按钮前进时淡入和淡出,所以在按下按钮之后需要更多的时间才能消失,否则加载新图像后立即开始淡入淡出。这会将所有内容重置为开始时的状态,然后再次开始淡入淡出过程。如果出现应该停止淡入淡出过程的事情,stopFadeOut将删除所有动画。例如,如果点击发生:
- (IBAction)tapOccurs:(id)sender {
[self stopFadeOut];
[self resetToInitialConfigurationWithDelay:2];
}
停止任何先前的动画,然后重新启动该过程。或者至少那是理论。实际上,如果,例如,快速连续几次点击,褪色的视图将开始短暂淡出,并一次又一次地重置,使它看起来像是在闪烁,直到它们最终完全淡出。我想也许问题是动画被推迟了,但是removeAllAnimation调用没有,所以我换了 [self stopFadeOut]; 同 [self performSelector:@selector(stopFadeOut)withObject:nil afterDelay:2];
但结果是一样的。如果永远不会调用stopFadeOut,则行为完全相同,因此我可以得出的唯一结论是,无论出于何种原因,removeAllAnimations调用都不起作用。有什么想法吗?
答案 0 :(得分:3)
听起来像在上一次运行结束前多次调用reset方法。您可以通过向tap和reset方法添加log-statements来轻松验证这一点,并计算每种方法的日志数量,并观察连续多次点击时会发生什么。
我试图用下面的图画说明问题。
T = tapOccurs:
O = fadeOutViews:
--- = wait between T & O
Normal single tap
T-----O T-----O
---------------------> time
Multiple taps in a row
T-----O
T-----O
T-----O
---------------------> time
What it sound like you are trying to do
T-
T---
T-----O
---------------------> time
每次调用fadeOutViews:
(插图中称为O
)时,视图都会淡出。看看你的fadeOutView:实现这意味着不透明度将跳转到1然后慢慢渐渐变为0,因此看起来它们闪烁的次数相同,直到最终重新开始。
你可以做很多事情来阻止这种情况发生。有一件事是通过调用cancelPerformSelectorsWithTarget:
或cancelPreviousPerformRequestsWithTarget:selector:object:
之类的内容来取消所有计划的重置方法。