接上一篇自定義轉(zhuǎn)場動畫Pop

接著上一篇push的自定義轉(zhuǎn)場動畫,pop自定義轉(zhuǎn)場其實變得很簡單了.

創(chuàng)建類(CustomPopTransition),同樣遵守UIViewControllerAnimatedTransitioning.

 同樣實現(xiàn)這兩個方法:
 - (NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext;
 - (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext;

代碼:

@property (nonatomic, strong) id<UIViewControllerContextTransitioning>customTransitionContext;

- (NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContex{
   return 0.5f;
}

- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext{
    
    PopViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
    PushViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
    
    UIView *contentView = [transitionContext containerView];
    UIButton *button = toVC.push;
   
    [contentView addSubview:toVC.view];
    [contentView addSubview:fromVC.view];
    
    //繪制大圓
    CGSize sideSize = CGSizeMake(button.center.x, toVC.view.frame.size.height - button.center.y);
    CGFloat radius = sqrt((sideSize.width * sideSize.width) + (sideSize.height * sideSize.height));
    UIBezierPath *startBP = [UIBezierPath bezierPathWithOvalInRect:CGRectInset(button.frame, -radius, -radius)];

    //繪制小圓
    UIBezierPath *finalBP = [UIBezierPath bezierPathWithOvalInRect:button.frame];

    //設置路徑
    CAShapeLayer *maskLayer = [CAShapeLayer layer];
    maskLayer.path = finalBP.CGPath;
    fromVC.view.layer.mask = maskLayer;

     //執(zhí)行動畫
    CABasicAnimation *maskLayerAnimation = [CABasicAnimation animationWithKeyPath:@"path"];
    maskLayerAnimation.fromValue = (__bridge id _Nullable)(startBP.CGPath);
    maskLayerAnimation.toValue = (__bridge id _Nullable)(finalBP.CGPath);
    maskLayerAnimation.duration = [self transitionDuration:transitionContext];
    maskLayerAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    maskLayerAnimation.delegate = self;
    //添加動畫要在最后添加
   [maskLayer addAnimation:maskLayerAnimation forKey:@"path"];
}

#######pragma mark - CABasicAnimation代理
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{
//告訴系統(tǒng)專場結(jié)束
[self.customTransitionContext completeTransition:![self.customTransitionContext transitionWasCancelled]];
//清除fromVC.view和toVC.view上的mask
[self.customTransitionContext viewControllerForKey:UITransitionContextToViewControllerKey].view.layer.mask = nil;
[self.customTransitionContext viewControllerForKey:UITransitionContextFromViewControllerKey].view.layer.mask = nil;
}

PopViewController.m

同樣控制器須遵守<UINavigationControllerDelegate>協(xié)議, 所以self.navigationCtroller.delegate = self; //注意設置導航控制器的代理須寫在viewWillAppear中或是viewDidAppear.實現(xiàn)導航控制器的代理:

#pragma mark - UINavigationControllerDelegate
- (id<UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController animationControllerForOperation:(UINavigationControllerOperation)operation fromViewController:(UIViewController *)fromVC toViewController:(UIViewController *)toVC{

        if (operation == UINavigationControllerOperationPop) {
        return self.popAnimation;
    }
    return nil;
}

#pragma mark - 懶加載
- (CustomPopTransition *)popAnimation{
     if (!_popAnimation) {
     _popAnimation = [[CustomPopTransition alloc] init];
   }
     return _popAnimation;
}
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末几迄,一起剝皮案震驚了整個濱河市再姑,隨后出現(xiàn)的幾起案子痕貌,更是在濱河造成了極大的恐慌滋觉,老刑警劉巖浊竟,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件构回,死亡現(xiàn)場離奇詭異笨触,居然都是意外死亡孝情,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進店門著恩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來院尔,“玉大人,你說我怎么就攤上這事喉誊⊙冢” “怎么了?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵伍茄,是天一觀的道長栋盹。 經(jīng)常有香客問我,道長敷矫,這世上最難降的妖魔是什么例获? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任汉额,我火速辦了婚禮,結(jié)果婚禮上榨汤,老公的妹妹穿的比我還像新娘蠕搜。我一直安慰自己,他們只是感情好收壕,可當我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布妓灌。 她就那樣靜靜地躺著,像睡著了一般蜜宪。 火紅的嫁衣襯著肌膚如雪虫埂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天圃验,我揣著相機與錄音掉伏,去河邊找鬼。 笑死澳窑,一個胖子當著我的面吹牛岖免,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播照捡,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼颅湘,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了栗精?” 一聲冷哼從身側(cè)響起闯参,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎悲立,沒想到半個月后鹿寨,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡薪夕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年脚草,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片原献。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡馏慨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出姑隅,到底是詐尸還是另有隱情写隶,我是刑警寧澤,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布讲仰,位于F島的核電站慕趴,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜冕房,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一躏啰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧耙册,春花似錦丙唧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽培漏。三九已至溪厘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間牌柄,已是汗流浹背畸悬。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留珊佣,地道東北人蹋宦。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像咒锻,于是被迫代替她去往敵國和親冷冗。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,554評論 2 349

推薦閱讀更多精彩內(nèi)容