iOS版动画从左到右

问题描述:

现在我的动画代码工作正常:iOS版动画从左到右

NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents *components = [cal components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit | NSTimeZoneCalendarUnit) fromDate:[[AXDateManager sharedInstance] currentDate]]; 

if (forward) { 
    [UIView transitionWithView:self.tableView 
         duration:ANIMATIONDURATION 
         options:UIViewAnimationOptionTransitionCurlUp 
        animations:^{ 
     /* maybe animation to hide your other views */ 
    } completion:^(BOOL finished) { 
     /* remove the required views */ 
    }]; 
    [components setDay:components.day + 1]; 
} else { 
    [UIView transitionWithView:self.tableView 
         duration:ANIMATIONDURATION 
         options:UIViewAnimationOptionTransitionCurlDown 
        animations:^{ 
     /* maybe animation to hide your other views */ 
    } completion:^(BOOL finished) { 
     /* remove the required views */ 
    }]; 
    [components setDay:components.day - 1]; 
} 
[self setupWithDate:[cal dateFromComponents:components]]; 

现在我想从左至右切换到动画。但我遇到了几个问题。有一个问题我试过被复制原始的tableview与

NSData *archivedData = [NSKeyedArchiver archivedDataWithRootObject:self.tableView]; 
UITableView *tableView = [NSKeyedUnarchiver unarchiveObjectWithData:archivedData];  
[tableView registerNib:[UINib nibWithNibName:@"Cell" bundle:nil] forCellReuseIdentifier:@"Cell"]; 

和设置委托和数据源到新表,并去除旧的委托和数据源的事情。但不知何故,新的从来没有正确安装,所以它不会在其单元上显示数据。这是我尝试过用动画:

[UIView animateWithDuration:3 
         delay:0.0 
        options:UIViewAnimationOptionCurveEaseIn 
       animations:^{ 
    CGRect oldTableRect = self.tableview.frame; 
    CGRect newTableRect = tableView.frame; 
    oldTableRect.origin.x = oldTableRect.origin.x - oldTableRect.size.width; 
    newTableRect.origin.x = newTableRect.origin.x - newTableRect.size.width; 
    self.tableView.frame = oldTableRect; 
    tableView.frame = newTableRect; 
} 

但上述动画表的莫名其妙一个人永远感动。

我想达到的目标:

  • self.tabelview应向左移动到屏幕
  • 同时一个新的tableview(已装入新数据)13:29从左边走self.tablview的原始位置
  • 新的tableview也将取代旧的和老的人不得被完全删除

一些更多的相关信息:

  • self.tableview的UIViewController中与故事板
  • 代表和self.tableview的数据源实例化编程在viewDidLoad中

什么是最好的办法是设置?我可以用一张桌子实现从左到右的动画,与我的原始动画一样,上下卷曲?

编辑 所以这就是我试过的。两件事情不起作用。旧桌子不会移动到左侧。新表格正确移动,但没有设置数据。

if (forward) { 
    NSData *archivedData = [NSKeyedArchiver archivedDataWithRootObject:self.tableView]; 
    UITableView *tableView = [NSKeyedUnarchiver unarchiveObjectWithData:archivedData]; 
    [tableView registerNib:[UINib nibWithNibName:@"Cell" bundle:nil] forCellReuseIdentifier:@"Cell"]; 

    // for debugging 
    [self.tableView setBackgroundColor:[UIColor yellowColor]]; 
    [tableView setBackgroundColor:[UIColor redColor]]; 

    tableView.frame = self.tableView.frame; 

    CGRect rect = tableView.frame; 

    // -20 for debugging 
    rect.origin.x = rect.origin.x + rect.size.width - 20; 
    tableView.frame = rect; 

    [self.view addSubview:tableView]; 
    tableView.dataSource = self; 
    tableView.delegate = self; 

    // keep reference to old tableview 
    UITableView *old = self.tableView; 
    self.tableView = tableView; 

    // setup new tableview with data 
    [components setDay:components.day + 1]; 
    [self setupWithDate:[cal dateFromComponents:components]]; 

    CGRect oldTableRect = old.frame; 
    CGRect newTableRect = tableView.frame; 
    oldTableRect.origin.x = oldTableRect.origin.x - oldTableRect.size.width; 
    newTableRect.origin.x = newTableRect.origin.x - newTableRect.size.width; 

    [UIView animateWithDuration:3 
          delay:0.0 
         options:UIViewAnimationOptionCurveEaseIn 
        animations:^{ 
     old.frame = oldTableRect; 
     self.tableView.frame = newTableRect; 
    } 

        completion:^(BOOL finished) { 
     [old removeFromSuperview]; 
    }]; 

} 

声明和分配您使用的动画到动画块中的变量的声音对我来说有点有点不可思议,试试这个:

CGRect oldTableRect = self.tableview.frame; 
CGRect newTableRect = tableView.frame; 
oldTableRect.origin.x = oldTableRect.origin.x - oldTableRect.size.width; 
newTableRect.origin.x = newTableRect.origin.x - newTableRect.size.width; 

[UIView animateWithDuration:3 
        delay:0.0 
       options:UIViewAnimationOptionCurveEaseIn 
      animations:^{ 
           self.tableView.frame = oldTableRect; 
           tableView.frame = newTableRect; 
         } 
+0

请参见上面我的编辑。 – KaraBenNemsi

+0

似乎你正在使用ARC来访问一个实例变量到块中,​​你应该声明像__block UITableView * old = self.tableView这样的指针,关于数据未被重载,一定要调用'[self.tableView reloadData ]'在新的tableview之后,你已经设置了新的数据,代理似乎很好 – Manu

+0

setupWithDate重新加载self.tableview的数据。我也试着用__block来使用指针。但这两个问题仍然存在。旧表格不会移到左侧,新表格不会更新。 – KaraBenNemsi