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