您好我正在尝试实现从UITableViewCell到新控制器的转换,在转换时我想将单元格的标签移动到新控制器中新标签的位置,并且在解除控制器时,标签应该回到单元格中的原始位置。效果在此链接中复制:http://framerjs.com/examples/preview/#detail-view-transition.framer
有人能指出我正确的方向吗?
答案 0 :(得分:1)
而不是实际为UITableViewCell制作动画,它可能就足够了#34;假的"它。一种可行的方法是将控制器视图中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;
}];
}
这不是一个完美的解决方案,但我希望它能帮助您找到解决方案的正确方向:)