【问题标题】:Refreshing UIScrollView / Animation, timing (Objective-C)刷新 UIScrollView / 动画,计时(Objective-C)
【发布时间】:2023-04-02 15:30:02
【问题描述】:

我有一个显示数据列表的 UIScrollView。 现在,当用户向列表中添加一个项目时,我可以扩展 UIScrollView 的内容大小并使用 setContentOffset 和 YES 平滑向下滚动到动画。

当用户从列表中删除一个项目时,我想调整 UIScrollView 的内容大小,并以动画方式向上滚动一步。

我怎样才能正确订购?现在,如果我在向上滚动之前调整内容大小,则滚动没有动画效果。

我尝试在调整内容大小之前向上滚动,但仍然无法平滑过渡。

有没有办法在调整内容大小之前完成滚动动画?

谢谢

【问题讨论】:

    标签: iphone objective-c uiscrollview


    【解决方案1】:

    是的,您需要在滚动视图的动画完成后调用该方法来调整内容的大小。您可以在滚动视图委托的scrollViewDidEndScrollingAnimation: 方法中执行此操作。将您的控制器设置为委托,并实现该方法。

    - (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {
         [scrollView setContentSize: newSize];
    }
    

    您不需要计时器或表格视图。

    【讨论】:

      【解决方案2】:

      我认为你应该使用 UITablView 而不是 UIScrollView。

      在 UITableView 中可以实现刷新功能。

      使用一行代码:

      [tblView reloadData];
      

      【讨论】:

        【解决方案3】:

        您可以做的一件事是使用计时器。据我了解,您想这样做:

        1. 滚动到新视口
        2. 从列表中删除项目
        3. 调整内容大小

        你可以这样做:

        [scrollView setContentOffset:... animated:YES];
        [NSTimer scheduledTimerWithTimeInterval:SECONDS_AS_FLOAT target:self selector:@selector(timerCallback:) userinfo:nil repeats:NO];
        
        - (void)timerCallback:(NSTimer *)timer {
            // remove item from list at this point
            ...
            // set new content size
            [scrollView setContentSize];
        }
        

        你必须尝试看看什么是正确的 SECONDS_AS_FLOAT 时间,它应该比滚动持续时间略长。它大约为几百毫秒,因此您可以尝试使用 0.2 到 0.5 之间的值。

        【讨论】:

          猜你喜欢
          • 2012-03-09
          • 1970-01-01
          • 1970-01-01
          • 2012-10-13
          • 2016-01-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多