IOS中如何類比UINavigationController的Slide動畫

來源:互聯網
上載者:User

在IOS中,UINavigationController在添加(push)與刪除(pop)View的時候,會加入Slide的動畫。有時候,在需要自己進行類比這個動畫的時候,會比較麻煩。

通常,可以使用CATransition來使用Push效果,基本代碼如下:

CATransition *transition = [CATransition animation];

transition.duration = 0.3f;

transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];

transition.type = kCATransitionPush;

transition.subtype = kCATransitionFromRight;

transition.fillMode = kCAFillModeBackwards;

transition.speed = 0.5f ;

transition.removedOnCompletion = YES;

[self.view.layer removeAllAnimations];

[self.view.layer addAnimation:transition forKey:nil];


上面是Push的代碼,Pop的時候,只要將 subtype改為 kCATransitionFromLeft。
但是,使用CATransition的Push的時候,ios會將舊的view在推進中,進行Fade的處理。由於有這樣的一個過程,會造成螢幕的閃白,而且與原來的UINavigationController的動畫不一致。
要解決這個問題,只有使用暴力的方法,這個方法就是,先將原來的View進行截屏,產生一個UIImageView,再將這個UIImageView與新的View進行橫向的平移動畫,在動畫結束之後,再將新的UIImageView進行刪除。
截屏的代碼:

UIGraphicsBeginImageContext(viewController.view.bounds.size);

CALayer *layer = viewController.view.layer;

[layer renderInContext:UIGraphicsGetCurrentContext()];

UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return image  ; 

再使用UIView的animation來實現,

[UIViewbeginAnimations:nilcontext:nil];

[UIViewsetAnimationDuration:0.35f];

[UIViewsetAnimationDelegate:self];

[UIViewsetAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];

[UIViewsetAnimationCurve:UIViewAnimationCurveEaseInOut];

imageView.origin = CGPointMake(imageView.origin.x-screenRect.size.width, imageView.origin.y) ; 

maskImageView.origin = CGPointMake(maskImageView.origin.x-screenRect.size.width, maskImageView.origin.y);

[UIViewcommitAnimations];

這個方法的缺點就是太過於暴力,在截屏的時候,會造成效能問題。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.