2014-09-06 79 views
2

我在我的应用程序中有一个奇怪的图形故障,当我使用刷卡回到以前的视图。导航栏故障时使用iOS 7刷卡导航

当我正常滑动并完成滑动手势时,每项工作都可以正常工作。

当我取消滑动手势时,即:开始手势,然后沿相反方向移动手指以停止手势并保持当前视图。

我得到的故障如果我回到前一个屏幕,该视图的barbutton项目与前一个视图的barbutton项目重叠。

截图: 起点:enter image description here

刷卡回退姿势和完整的姿态,去以前的观点,正常工作:enter image description here

刷卡回退姿势和取消手势,从而留在当前屏幕上,然后去回到前一个屏幕,文本按钮重叠:enter image description here

当强制退出应用程序并重新启动它时,此图形故障仅消失。但是,当然,如果你再次挑起毛刺,它又会出现。

希望有一些开发者有同样的问题。

编辑,问题的原因是以下代码:

- (void)resetCacheAndRefreshTableAnimated:(BOOL)animated { 
    [NSFetchedResultsController deleteCacheWithName:kCDFollowedCacheName]; 
    [self setSortDescriptorsForFetchRequest:self.fetchedResultsController.fetchRequest]; 
    NSError *error = nil; 
    [self.fetchedResultsController performFetch:&error]; 
    [self.tableView reloadData]; 
} 

这种方法被称为在viewWillAppear中。当方法调用被删除时,问题就会消失。任何想法?

+0

请张贴一些代码。我可以想象的是,您可能没有清除移动的视图,所以即使您在移动中取消了手势,已移动的视图也不会重置。 – 2014-09-06 14:55:08

回答

1

基于Vikram的回复和StackOverflow的另一个问题进行管理。

所以问题是[self.tableView reloadData]被称为ViewWillAppear。 但刷卡取消时不应重新加载tableview。

此代码防止刷卡时被取消重装:

id <UIViewControllerTransitionCoordinator> tc = self.transitionCoordinator; 
if (tc && [tc initiallyInteractive]) 
{ 
    [tc notifyWhenInteractionEndsUsingBlock: 
    ^(id<UIViewControllerTransitionCoordinatorContext> context) 
    { 
     if (![context isCancelled]) 
      // not cancelled, do it 
      [self resetCacheAndRefreshTableAnimated:YES]; // this will clear the CoreData cache and forces a reload 
    }]; 
} 
else // not interactive, do it 
    [self resetCacheAndRefreshTableAnimated:YES];  // this will clear the CoreData cache and forces a reload 
0

也许您可能未清除移动的视图,因此即使您在移动过程中取消了手势,已移动的视图也不会重置。

+0

谢谢,我发现这个类似的问题:http://stackoverflow.com/questions/23261304/navigation-bar-title-bug-with-interactivepopgesturerecognizer。如何识别手势何时取消? – edwardmp 2014-09-06 15:05:57

+0

发现问题的来源,在取消视图控制器的ViewWillAppear中,这行代码导致了这个问题:'[self resetCacheAndRefreshTableAnimated:YES];'删除它修复了问题。 – edwardmp 2014-09-06 15:16:49