ECSlidingViewController 冻结 UIRefreshControl
Posted
技术标签:
【中文标题】ECSlidingViewController 冻结 UIRefreshControl【英文标题】:ECSlidingViewController freezes UIRefreshControl 【发布时间】:2013-12-05 19:28:03 【问题描述】:我在我的应用程序中使用 ECSlidingViewController。我有一个带有 UITableView 的视图控制器,它使用 UIRefreshControl 来执行一个长任务。当我下拉刷新时,刷新控件开始正常动画,但是当我转到顶部视图控制器(在本例中为我的主菜单)然后返回我的视图控制器时,refreshControl 完全冻结,直到任务完成。
为了更清楚,这些是我遵循的步骤:
-
下拉我的 tableView 以刷新它。
一个长任务在后台执行,比如:
- (void)pulledToRefresh:(UIRefreshControl *)refreshControl
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^
long long a = 0;
for (long long i = 0; i < 100000000000; i++)
a++;
dispatch_async(dispatch_get_main_queue(), ^
[refreshControl endRefreshing];
);
);
当刷新控件动画时,我滑动(我不调用resetTopView:animated:
方法或其中任何一个,我只是做了一个平移手势)我当前的视图控制器向右显示我的主菜单。发生这种情况时,刷新控件会突然停止动画(冻结)。
我回到最初使用的视图控制器,但它仍然冻结。
任务完成,刷新控件自然结束刷新,通过漂亮的动画将其从我的 tableView 中移除。
知道为什么会这样吗?
【问题讨论】:
这可能是ECSlidingViewController
中的一个错误。见github.com/ECSlidingViewController/ECSlidingViewController/…
很高兴知道你们仍在从事此工作并意识到此错误。谢谢!
我刚刚对此进行了修复。试试最新的 master 分支,告诉我它是如何为你工作的。
完美运行!感谢您的快速回复!
对不起迈克尔!我已经给它第二次了,它似乎仍然不起作用=/
【参考方案1】:
我可能已经找到了解决方案......将“detectPanGestureRecognizer”方法更改为下面,似乎对我有用......
- (void)detectPanGestureRecognizer:(UIPanGestureRecognizer *)recognizer
if (recognizer.state == UIGestureRecognizerStateBegan)
_isInteractive = YES;
dispatch_async(dispatch_get_main_queue(), ^
[self.defaultInteractiveTransition updateTopViewHorizontalCenterWithRecognizer:recognizer];
);
_isInteractive = NO;
【讨论】:
以上是关于ECSlidingViewController 冻结 UIRefreshControl的主要内容,如果未能解决你的问题,请参考以下文章
ECSlidingViewController - 你怎么知道菜单何时显示?
ECSlidingViewController 冻结 UIRefreshControl
ecslidingviewcontroller和uislider
带有 UIScrollView 的 ECSlidingViewController
使用 ECSlidingViewController 在 MenuController 上激活平移手势
ECSlidingViewController - 将 UITableView 和 segue 添加到另一个 ViewController