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