所以我试图让它这样我的headerView,它只是一个普通的UIView
,一旦用户向上滚动就会动画起来,但如果用户向下滚动则只是正常向下滚动而没有动画。它似乎工作但有一个问题 - 因为UIScrollView
在向上滚动时弹跳,这会导致方向切换,动画似乎被中断。
FIX?:我正在考虑修复一旦动画开始,我会禁用捕捉滚动直到它完成 - 但我不知道该怎么做。
注意:我的UIScrollView
是childVC
中的tableVCContainerView
。 headerView
和此tableVCContainerView
都是subviews
的{{1}}。我不认为这是我试图解决的问题的一部分,但我想记下它。
(void)childScrollViewDidScroll:(NSNotification *)note {
containerView
}
答案 0 :(得分:0)
所以我在isAnimatingHeaderView中放了一个标志,这是在动画时禁用任何滚动捕获的明显解决方案。此代码与此处的任何其他代码一样,可用于询问如何为标题上/下设置动画的众多问题:
- (void)childScrollViewDidScroll:(NSNotification *)note {
UIScrollView* scrollView = [[note userInfo] valueForKey:kWSAccountVCChildDidScrollScrollViewKey];
CGFloat scrollOffset = scrollView.contentOffset.y;
CGFloat scrollWindow = self.headerView.frame.size.height-kWSWordlistDividerViewHeight;
__block CGRect containerFrame;
if (isAnimatingHeaderView) {
return;
}
// Only animate if scrolling up
if (self.lastOffset.y < scrollOffset && self.containerView.frame.origin.y > -scrollWindow) {
isAnimatingHeaderView = YES;
[UIView animateWithDuration:0.3f delay:0.0f options:0 animations:^{
containerFrame = self.containerView.frame;
containerFrame.origin.y = -scrollWindow;
self.containerView.frame = containerFrame;
} completion:^(BOOL finished) {
isAnimatingHeaderView = NO;
self.lastOffset = CGPointMake(0.0f, 0.0f);
}];
}
else if (self.lastOffset.y > scrollOffset && self.containerView.frame.origin.y < scrollWindow) {
isAnimatingHeaderView = YES;
[UIView animateWithDuration:0.3f delay:0.0f options:0 animations:^{
containerFrame = self.containerView.frame;
containerFrame.origin.y = 0;
self.containerView.frame = containerFrame;
} completion:^(BOOL finished) {
isAnimatingHeaderView = NO;
self.lastOffset = CGPointMake(0.0f, 0.0f);
}];
}
}