gpt4 book ai didi

iphone - 单View从左到右的iOS动画

转载 作者:行者123 更新时间:2023-11-29 10:59:07 26 4
gpt4 key购买 nike

我现在的动画代码运行良好:

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]];

现在我想从左到右切换动画。但是我遇到了几个问题。我尝试的其中一件事是用

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

并为新表设置委托(delegate)和数据源,并从旧表中删除委托(delegate)和数据源。但是不知何故,新的永远无法正确设置,因此它不会在其单元格上显示数据。这是我尝试使用的动画:

[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;
}

但是在上面的动画中,其中一张 table 从未移动过。

我想要实现的目标:

  • self.tabelview 应移至屏幕左侧
  • 同时一个新的tableview(已经载入了新的数据)应该从左边出现并占据self.tablview的原始位置
  • 新的 tableview 也应该替换旧的,旧的应该完全删除

更多信息:

  • self.tableview 的 UIViewController 是用 Storyboard实例化的
  • self.tableview 的委托(delegate)和数据源在 viewdidload 中以编程方式设置

什么是最好的方法?我可以只用一张 table 实现从左到右的动画,类似于我原来的上下 curl 的动画吗?

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

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];
}];

}

最佳答案

在动画 block 中声明和分配用于动画的变量对我来说听起来有点奇怪,试试这个:

 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;
}

关于iphone - 单View从左到右的iOS动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16858716/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com