iOS uitablewviewcell 的视图转换,转换时移动单元格标签
iOS view transition from uitablewviewcell, move cell labels while transitioning
您好,我正在尝试实现从 UITableViewCell 到新控制器的转换,在转换时我想将单元格的标签移动到新控制器中新标签的位置,当关闭控制器时,标签应该回到单元格中的原始位置。效果在 link 中复制:http://framerjs.com/examples/preview/#detail-view-transition.framer
任何人都可以指出我正确的方向吗?
与其实际为 UITableViewCell 设置动画,不如 "fake" 它可能就足够了。一种可行的方法是将控制器视图中的 UITableViewCell 的框架传递给下一个视图控制器。然后,当下一个视图加载时,将相应的视图动画化到从您刚刚通过的那一帧开始的位置。可能看起来像这样。
@property (assign, nonatomic) CGRect cellFrameForNextView;
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
self.cellFrameForNextView = cell.frame;
self.cellFrameForNextView.origin = [cell convertPoint:cell.frame.origin toView:self.view];
[self performSegueWithIdentifier:@"showNextView" sender:self];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if([segue.identifier isEqualToString:@"showNextView"]) {
NextViewController *vc = (NextViewController*)[segue destinationViewController];
vc.frameToStartAnimation = self.cellFrameForNextView;
}
}
然后在您的下一个视图中
@property (assign, nonatomic) CGRect frameToStartAnimation;
@property (strong, nonatomic) UIView *viewThatWillAnimate;
-(void)viewDidAppear:(animated)animated
{
[super viewDidAppear:animated]
CGRect frameToFinishAnimation = self.viewThatWillAnimate.frame;
self.viewThatWillAnimate.frame = self.frameToStartAnimation;
[UIView animationWithDuration:0.3 animations:^{
self.viewThatWillAnimate.frame = frameToFinishAnimation;
}];
}
这不是一个完美的解决方案,但我希望它能让您朝着正确的方向找到解决方案:)
您好,我正在尝试实现从 UITableViewCell 到新控制器的转换,在转换时我想将单元格的标签移动到新控制器中新标签的位置,当关闭控制器时,标签应该回到单元格中的原始位置。效果在 link 中复制:http://framerjs.com/examples/preview/#detail-view-transition.framer
任何人都可以指出我正确的方向吗?
与其实际为 UITableViewCell 设置动画,不如 "fake" 它可能就足够了。一种可行的方法是将控制器视图中的 UITableViewCell 的框架传递给下一个视图控制器。然后,当下一个视图加载时,将相应的视图动画化到从您刚刚通过的那一帧开始的位置。可能看起来像这样。
@property (assign, nonatomic) CGRect cellFrameForNextView;
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
self.cellFrameForNextView = cell.frame;
self.cellFrameForNextView.origin = [cell convertPoint:cell.frame.origin toView:self.view];
[self performSegueWithIdentifier:@"showNextView" sender:self];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if([segue.identifier isEqualToString:@"showNextView"]) {
NextViewController *vc = (NextViewController*)[segue destinationViewController];
vc.frameToStartAnimation = self.cellFrameForNextView;
}
}
然后在您的下一个视图中
@property (assign, nonatomic) CGRect frameToStartAnimation;
@property (strong, nonatomic) UIView *viewThatWillAnimate;
-(void)viewDidAppear:(animated)animated
{
[super viewDidAppear:animated]
CGRect frameToFinishAnimation = self.viewThatWillAnimate.frame;
self.viewThatWillAnimate.frame = self.frameToStartAnimation;
[UIView animationWithDuration:0.3 animations:^{
self.viewThatWillAnimate.frame = frameToFinishAnimation;
}];
}
这不是一个完美的解决方案,但我希望它能让您朝着正确的方向找到解决方案:)