【问题标题】: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】:
您可以做的一件事是使用计时器。据我了解,您想这样做:
- 滚动到新视口
- 从列表中删除项目
- 调整内容大小
你可以这样做:
[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 之间的值。