【问题标题】:UIPageViewController scroll automatically issueUIPageViewController 自动滚动问题
【发布时间】:2017-06-29 09:22:08
【问题描述】:

我使用这样的计时器每 5 秒自动滚动一次 UIPageViewController

     _bannerTimer = [NSTimer scheduledTimerWithTimeInterval:5.0
                                         target:self
                                       selector:@selector(loadNextController)
                                       userInfo:nil
                                        repeats:YES];


  - (void)loadNextController
        {

        self.index++;

        HeaderAdVC *nextViewController;
        if(self.index>arrayImages.count-1)
        {
            self.index=0;
            [pageIndicator setCurrentPage:0];
            nextViewController = [self viewControllerAtIndex:0];
        }
        else
        {
            nextViewController = [self viewControllerAtIndex:self.index];
        }


        [pageIndicator setCurrentPage:self.index];
        [pageController setViewControllers:@[nextViewController]
                                 direction:UIPageViewControllerNavigationDirectionForward
                                  animated:YES
                                completion:nil];


    }

并删除viewWillDisappear中的计时器

-(void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];

    [_bannerTimer invalidate];
}

问题:

我的问题是当调用 loadNextController 方法时,我的应用程序停止响应。 如果我切换到下一页在每个视图上仍然遇到同样的问题。

【问题讨论】:

  • 你应该在 loadNextController 中停止你的计时器
  • 我在 viewWillDisappear 上的计时器无效
  • 我能看到你的错误控制台吗?
  • 我在控制台中没有任何错误。我的所有用户界面都只是停止响应一段时间。
  • 检查我的回答here。对我来说效果很好。

标签: ios objective-c nstimer uipageviewcontroller


【解决方案1】:

像下面这样做一些改变,在后台线程中执行所有non-ui任务,在主线程中执行所有UI操作,试试这个

- (void)loadNextController
{

    dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){

        self.index++;

        HeaderAdVC *nextViewController;
        if(self.index>arrayImages.count-1)
        {
            self.index=0;
            [pageIndicator setCurrentPage:0];
            nextViewController = [self viewControllerAtIndex:0];
        }
        else
        {
            nextViewController = [self viewControllerAtIndex:self.index];
        }

        dispatch_async(dispatch_get_main_queue(), ^{
            [pageIndicator setCurrentPage:self.index];
            [pageController setViewControllers:@[nextViewController]
                                     direction:UIPageViewControllerNavigationDirectionForward
                                      animated:YES
                                    completion:nil];
        });



    });
}

我希望这会对你有所帮助..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    相关资源
    最近更新 更多