接收到内存警告并且“模态”视图被解除后,UITableView会出现部分剪辑(消隐)

时间:2011-08-23 20:25:43

标签: objective-c ios uitableview memory-management user-interface

我有一个产品详细信息屏幕,当用户选择产品的表格/网格视图中显示的产品之一时,该屏幕会滑入视图。我使用CATransition来向上滑动视图,而不是使用presentModalViewController。

原因是因为在详细信息屏幕中,我允许用户向左/向右滑动以浏览产品表并显示相应的详细信息。同样,幻灯片动画使用CATransition完成。当我使用模态视图来显示初始细节屏幕时,刷入的产品屏幕将显示为旋转并且通常表现得很奇怪。我认为它与在模态视图中使用CATransition有关,所以我决定使用CATransition来呈现初始屏幕。以下是执行幻灯片动画的代码:

+(void)slideFromView:(UIView*)currentView toView:(UIView*)nextView direction(CCUISlideDirection)direction{

  // get the the underlying UIWindow, or the view containing the current view
  UIView *theWindow = [currentView superview];

  // remove the current view and replace with the next view to display
  [currentView removeFromSuperview];
  [theWindow addSubview:nextView];

  // set up an animation for the transition between the views
  CATransition *animation = [CATransition animation];
  [animation setDuration:0.5];
  [animation setType:kCATransitionPush];
  switch (direction) {
    case CCUISlideLeft:
      [animation setSubtype:kCATransitionFromRight];
      break;
    case CCUISlideRight:
      [animation setSubtype:kCATransitionFromLeft];
      break;
    case CCUISlideUp:
      [animation setSubtype:kCATransitionFromTop];
      break;
    case CCUISlideDown:
      [animation setSubtype:kCATransitionFromBottom];
      break;
    default:
      break;
  }
  [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];   
  [[theWindow layer] addAnimation:animation forKey:@"SwitchToView1"];
}

现在所有滑入的视图转换都可以正常工作,直到我收到内存警告。收到警告后,然后在屏幕外关闭/滑动详细信息屏幕,产品的部分表格/网格视图将显示为已剪切。具体来说,桌子右侧约1/3显示为白色。请参见下面的屏幕截图链接:

http://www.dropbox.com/gallery/19636498/1/work?h=4ecde7

此外,这是解除视图的委托代码:

-(IBAction)dismiss:(id)sender
{
  MyWishesItemController* controller = (MyWishesItemController*)sender;
  [CCUIHelper slideFromView:controller.currentView toView:self.view direction:CCUISlideDown];
  if ([[_wishListResultsController fetchedObjects] count] > 0) {
    [self showWishList];
  }
  else {
    [self showEmptyList];
  }
}

此外,当我在应用程序中选择不同的选项卡视图并返回到表视图时,它看起来很好。对我来说奇怪的是它只是表格的一部分被消除了。当我收到警告时,我已经尝试重新加载表格,但这不起作用。我也通过仪器运行它来识别和修复一些泄漏。

除了清除didReceiveMemoryWarning方法中的一些缓存,以及最小化内存使用以避免警告之外,我应该怎么做才能解决此问题。 任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:0)

检查tableview上的自动调整大小。确保在内存警告后正确调整大小。