我正在尝试设置一个图像库类型视图,其中图像几乎是全屏的,并且导航控制器、工具栏、按钮(在图像之间移动)和滑块(在图像之间快速移动)都在没有时间后淡出互动,然后点击返回。到目前为止我所拥有的(我敢肯定这甚至还没有接近正确的方法,我是一个初学者)是这样的:
-(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]; with [self performSelector:@selector(stopFadeOut) withObject:nil afterDelay:2];
但结果是一样的。如果从不调用 stopFadeOut,则行为完全相同,所以我可以得出的唯一结论是,无论出于何种原因,removeAllAnimations 调用都不起作用。有任何想法吗?