第0步 : 下载工具类,拖入项目中

github.com/zhYes/Anima…

第1步 : 导入头文件

#import "LYQuestionsOneAnimationTrasition.h"
///设置属性
@property (nonatomic,strong)LYQuestionsOneAnimationTrasition * animatedTransition;

第2步 : 设置代理

//1.设置代理
    self.animatedTransition = [[LYQuestionsOneAnimationTrasition alloc] init];
    self.navigationController.delegate = self.animatedTransition;

第3步 : 设置参数 完成跳转

    GWMCarSourceTableViewCell * cell = (GWMCarSourceTableViewCell *)[self.carListTableView cellForRowAtIndexPath:indexPath];
    CGRect imgFrame = [self getFrameInWindow:cell.carImageView];
// 2.传入必要的3个参数 
    [self.animatedTransition setTransitionImgView:cell.carImageView];//过渡动画的imageView
    [self.animatedTransition setTransitionBeforeImgFrame:imgFrame];//过渡之前imageView的frame
    [self.animatedTransition setTransitionAfterImgFrame:CGRectMake(0, 0, k_SCREEN_WIDTH, k_SCREEN_WIDTH * (275.0/375.0))];//过渡之后的imageView的frame
//3.push跳转
    GWMCarDetailBaseViewController * carDetail = [[GWMCarDetailBaseViewController alloc] init];
    [self.navigationController pushViewController:carDetail animated:YES];

增加一个用到的方法:

// 获取imageView在window中的位置
- (CGRect)getFrameInWindow:(UIView *)view
{
    return [view.superview convertRect:view.frame toView:nil];
}


以上已经完成了效果

最少的代码,快速实现自定义push、pop转场动画



美化

//1.隐藏目标控制器的图片,延迟转场后再显示
[self performSelector:@selector(delayMethods) withObject:nil afterDelay:0.25];//需要用到转场动画的地方
//2.图片的模式最好设置成 UIViewContentModeScaleAspectFit
[cell.carImageView setContentMode:UIViewContentModeScaleAspectFit];
//3.A->B   B->C  如果仅仅B->C实现效果且B->A不使用 在B中增加 :
- (void)viewWillAppear:(BOOL)animated {
    if ([self.navigationController.childViewControllers.lastObject isKindOfClass:[self class]]) {
        self.navigationController.delegate = nil;//pop不使用过度动画
    }
    [super viewWillAppear:animated];
}

原理讲解参app小胖子考:iOS自定义交互式转场动画-仿微approach信图片转场、酷狗转场 (从零到一 + 交互式图片浏览器)