我陷入困境,希望你们能帮忙
我有一个滚动视图,当滚动子视图的用户从下到上显示动画时。计时器然后开始计数5秒,然后调用另一种方法隐藏子视图
我实施了它按照需要工作,除了: 当子视图出现时,它几乎要隐藏,如果我滚动那一刻,子视图会静态显示并且永远不会隐藏。尝试再次滚动另一个子视图动态地处理静态的子视图(因为它是重复的或其他的)
这是我控制子视图显示和隐藏的代码
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if(!show){
[self showSubview];
if (!myidleTimer)
[self resetIdleTimer];
}
}
-(void)resetIdleTimer
{
//convert the wait period into minutes rather than seconds
int timeout = kApplicationTimeoutInMinutes;// equal to 5 seconds
[myidleTimer invalidate];
myidleTimer = [NSTimer scheduledTimerWithTimeInterval:timeout target:self selector:@selector(idleTimerExceeded) userInfo:nil repeats:NO];
}
-(void)idleTimerExceeded
{
if (show){
[myidleTimer invalidate];
[self hideSubview];
show=false;
}
}
“show”是一个bool,以确保何时隐藏和何时显示 她是显示/隐藏实现
-(void)hideSubview{
[UIView animateWithDuration:0.5
animations:^{
subview.frame = CGRectMake(0, screenWidth, screenHeight, 60);//move it out of screen
} completion:^(BOOL finished) {
[subview removeFromSuperview];
subview.frame=CGRectMake(0,screenWidth, screenHeight, 0);
}];
show=false;
}
-(void) showSubview{
subview = [[UIView alloc] init ];
[self.view addSubview:subview];
subview.frame = CGRectMake(0, screenWidth, screenHeight, 60);
[UIView animateWithDuration:1.0
animations:^{
subview.frame = CGRectMake(0, screenWidth-60, screenHeight, 60);
}];
show=TRUE;
}
我希望能够清楚地了解并能够帮助我找出问题所在 提前谢谢
答案 0 :(得分:1)
如果您按照自己的方式创建计时器,则滚动滚动视图时计时器不会触发。相反,请按以下方式创建。
NSTimer *timer = [NSTimer timerWithTimeInterval:1 target:self selector:@selector(doStuff:) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:使用defaultRunLoopMode而不是NSRunLoopCommonModes将计时器添加到运行循环中,NSRunLoopCommonModes是用户滚动时要让计时器触发的那个。