iOS table 视图滚动时的 UIView 动画?

iOS UIView animation when table view scroll?

我想要动画 like home screen of this app。此屏幕顶部有一个视图(上面有一个标签),下面有一个 table 视图。当我滚动 table 时,顶视图和上面的标题会随着动画变小,在特定点之后,它会变成像中间有标题的导航栏。当我向下滚动时也是一样。 这是我到目前为止尝试过的

-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGPoint offset = scrollView.contentOffset;
    NSLog(@"y is::: %f", offset.y);

    if (offset.y > 0 && offset.y < 16 && self.topView.frame.size.height > 64) {

        [UIView animateWithDuration:0.8 animations:^{

            CGRect rect = self.topView.frame;
            rect.size.height = rect.size.height-offset.y;
            self.topView.frame = rect;

        }completion:^(BOOL finish){

        }];

    }
    else if(offset.y <= 0 && offset.y > -16 && self.topView.frame.size.height < 80)
    {
        [UIView animateWithDuration:0.8 animations:^{

            CGRect rect = self.topView.frame;
            rect.size.height = 80;
            self.topView.frame = rect;

        }completion:^(BOOL finish){

        }];
    }

}

请注意,我的顶视图初始高度是 80,向上滚动时我想将其设置为 64,反之亦然。 使用此代码,视图高度已动画化,但它取决于动画 duration.So 如果我快速滚动则它不起作用 properly.The 我提到的原始应用程序具有非常流畅的动画。我怎么能做到这一点? 原始应用程序的屏幕截图- 这些屏幕截图显示了三个不同的滚动位置,请注意顶部的 "MySurgery" 文本。1- 较大的文本和右对齐。 2- 小文本和靠近中心位置 3- 较小的文本和集中的(如导航栏)

我认为你不需要动画,你只需要顶视图的一些计算和设置框架。喜欢,

    -(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGPoint offset = scrollView.contentOffset;

    if (offset.y>0 && offset.y<64) {
        [topView layoutIfNeeded];
        CGRect viewFrame = topView.frame;
        viewFrame.size.height--;
        topView.frame = viewFrame;
    }
}

请注意,如果您的视图使用自动布局,则需要 layoutIfNeeded