动画UIView标题 - 动画时禁用滚动

时间:2014-03-02 20:43:06

标签: uiscrollview uiviewanimation

所以我试图让它这样我的headerView,它只是一个普通的UIView,一旦用户向上滚动就会动画起来,但如果用户向下滚动则只是正常向下滚动而没有动画。它似乎工作但有一个问题 - 因为UIScrollView在向上滚动时弹跳,这会导致方向切换,动画似乎被中断。

FIX?:我正在考虑修复一旦动画开始,我会禁用捕捉滚动直到它完成 - 但我不知道该怎么做。

注意:我的UIScrollViewchildVC中的tableVCContainerViewheaderView和此tableVCContainerView都是subviews的{​​{1}}。我不认为这是我试图解决的问题的一部分,但我想记下它。

  • (void)childScrollViewDidScroll:(NSNotification *)note {

    containerView

    }

1 个答案:

答案 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);

    }];

}

}