欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

iOS如何自定義轉(zhuǎn)場動畫-創(chuàng)新互聯(lián)

這篇文章給大家分享的是有關(guān)iOS如何自定義轉(zhuǎn)場動畫的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。

成都創(chuàng)新互聯(lián)技術(shù)團(tuán)隊(duì)10年來致力于為客戶提供網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)成都品牌網(wǎng)站建設(shè)、網(wǎng)絡(luò)營銷推廣、搜索引擎SEO優(yōu)化等服務(wù)。經(jīng)過多年發(fā)展,公司擁有經(jīng)驗(yàn)豐富的技術(shù)團(tuán)隊(duì),先后服務(wù)、推廣了成百上千網(wǎng)站,包括各類中小企業(yè)、企事單位、高校等機(jī)構(gòu)單位。

預(yù)備

首先,我們現(xiàn)在介紹幾個(gè)在自定義轉(zhuǎn)場動畫時(shí)需要接觸的協(xié)議:

UIViewControllerAnimatedTransitioning: 實(shí)現(xiàn)此協(xié)議的實(shí)例控制轉(zhuǎn)場動畫效果。UIViewControllerInteractiveTransitioning: 實(shí)現(xiàn)此協(xié)議的實(shí)例控制著利用手勢過渡時(shí)的進(jìn)度處理。

我們在定義好了實(shí)現(xiàn)上面兩個(gè)協(xié)議的類后,只需要在需要進(jìn)行轉(zhuǎn)場的地方,提供對應(yīng)的對象即可。

ps:下面的實(shí)例中,請大家忽略動畫效果,關(guān)注實(shí)現(xiàn)。(其實(shí)是懶得去寫太多動畫了。??♂?)

模態(tài)跳轉(zhuǎn)(Present)

場景

self.present(vc!, animated: true) {}self.dismiss(animated: true) {}

實(shí)現(xiàn)步驟

  1. 設(shè)置將要 present 的 ViewController 的 transitioningDelegate 對象,此對象是實(shí)現(xiàn)協(xié)議 UIViewControllerTransitioningDelegate 的實(shí)例。實(shí)現(xiàn) UIViewControllerTransitioningDelegate 協(xié)議中的幾個(gè)代理方法,返回實(shí)現(xiàn)了 UIViewControllerAnimatedTransitioning 協(xié)議的動畫效果控制類。

需要實(shí)現(xiàn)的UIViewControllerTransitioningDelegate方法:

//返回用于 present 的自定義 transition 動畫optional func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning?//返回用于 dismiss 的自定義 transition 動畫optional func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning?

實(shí)例

/// 第一個(gè) VC 中點(diǎn)擊跳轉(zhuǎn)func presentClick(_ sender: Any) {  let vc = self.storyboard?.instantiateViewController(withIdentifier: "PresentSecondViewController")  vc?.modalPresentationStyle = .fullScreen  vc?.transitioningDelegate = self  self.present(vc!, animated: true) {}}// 第一個(gè) VC 實(shí)現(xiàn)協(xié)議,返回控制轉(zhuǎn)場動畫效果的實(shí)例extension PresentFirstViewController: UIViewControllerTransitioningDelegate { func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {  return NormalPresentAnimator() } func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {  return NormalPresentAnimator() }}

導(dǎo)航控制器跳轉(zhuǎn)(Push)

場景

self.navigationController?.pushViewController(vc!, animated: true)self.navigationController?.popViewController(animated: true)

實(shí)現(xiàn)步驟

  1. 設(shè)置導(dǎo)航控制器 UINavigationController 的 delegate。實(shí)現(xiàn) UINavigationControllerDelegate 協(xié)議中的代理方法,返回實(shí)現(xiàn)了 UIViewControllerAnimatedTransitioning 協(xié)議的動畫效果控制類。

需要實(shí)現(xiàn)的UINavigationControllerDelegate方法:

optional func navigationController(_ navigationController: UINavigationController,        animationControllerFor operation: UINavigationController.Operation,        from fromVC: UIViewController,        to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning?

實(shí)例

class PushFirstViewController: UIViewController { override func viewDidLoad() {  super.viewDidLoad()  self.navigationController?.delegate = self } @IBAction func pushClick(_ sender: Any) {  let vc = self.storyboard?.instantiateViewController(withIdentifier: "PushSecondViewController")  self.navigationController?.pushViewController(vc!, animated: true) }}extension PushFirstViewController: UINavigationControllerDelegate { //返回自定義過渡動畫 func navigationController(_ navigationController: UINavigationController,        animationControllerFor operation: UINavigationController.Operation,        from fromVC: UIViewController,        to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {  if operation == .pop && fromVC is PushFirstViewController {   return nil  }  return NormalPushAnimator() }}

UITabbarController

在前面的兩個(gè)專場實(shí)現(xiàn)中,我們在需要轉(zhuǎn)場的類中分別實(shí)現(xiàn)了UIViewControllerTransitioningDelegate 及 UINavigationControllerDelegate 方法,在這兩個(gè)協(xié)議中,還有這樣幾個(gè)方法:

/// UIViewControllerTransitioningDelegateoptional func interactionControllerForPresentation(using animator: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning?optional func interactionControllerForDismissal(using animator: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning?/// UINavigationControllerDelegateoptional func navigationController(_ navigationController: UINavigationController,          interactionControllerFor animationController: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning?

上面這幾個(gè)方法呢?其實(shí)就是我們通過利用手勢轉(zhuǎn)場時(shí)過渡的進(jìn)度處理方法。我們需要在代理方法中返回一個(gè)實(shí)現(xiàn)了 UIViewControllerInteractiveTransitioning 協(xié)議的對象來對轉(zhuǎn)場進(jìn)度進(jìn)行控制。下面的 UITabbarController 中我就實(shí)現(xiàn)一個(gè)利用手勢控制轉(zhuǎn)場的例子。 Present 及 Push/Pop 按照相同的思路實(shí)現(xiàn)即可。

場景

UITabbarController 在默認(rèn)的狀態(tài)下,切換控制器時(shí)是沒有動畫效果的。如果需要動畫效果的話,需要我們進(jìn)行自定義。

實(shí)現(xiàn)步驟

  1. 設(shè)置 UITabbarController 的 delegate。實(shí)現(xiàn) UITabBarControllerDelegate 協(xié)議中的代理方法,返回實(shí)現(xiàn)了 UIViewControllerAnimatedTransitioning 協(xié)議的動畫效果控制類,以及返回實(shí)現(xiàn)了 UIViewControllerInteractiveTransitioning 協(xié)議的轉(zhuǎn)場進(jìn)度控制類。

/// 返回實(shí)現(xiàn)了 UIViewControllerAnimatedTransitioning 協(xié)議的實(shí)例func tabBarController(_ tabBarController: UITabBarController,       animationControllerForTransitionFrom fromVC: UIViewController,       to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning?/// 返回實(shí)現(xiàn)了 UIViewControllerInteractiveTransitioning 協(xié)議的實(shí)例func tabBarController(_ tabBarController: UITabBarController,       interactionControllerFor animationController: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning?

實(shí)例

class TabbarController: UITabBarController, UITabBarControllerDelegate { override func viewDidLoad() {  super.viewDidLoad()  self.delegate = self}func tabBarController(_ tabBarController: UITabBarController,       animationControllerForTransitionFrom fromVC: UIViewController,       to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? { if self.selectedIndex == 0 {  return TabbarAnimator(edge: .right) } else {  return TabbarAnimator(edge: .left) }}func tabBarController(_ tabBarController: UITabBarController,       interactionControllerFor animationController: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning? { if self.panGesture.state == .began || self.panGesture.state == .changed {  return TabbarInteractionTransition(pan: self.panGesture) } else {  return nil }}

三方框架——Lottie

介紹

Lottie 是 Android 和 iOS 的移動庫,用 bodymovin 解析 Adobe After Effects 導(dǎo)出為 json 的動畫并在移動設(shè)備上生成矢量動畫。設(shè)計(jì)師可以輕松的創(chuàng)建漂亮(復(fù)雜)的動畫,無需程序員辛苦地手動去創(chuàng)建及調(diào)試。

場景

實(shí)現(xiàn)一些特殊的轉(zhuǎn)場,且程序員無足夠時(shí)間調(diào)試動畫時(shí)。

實(shí)現(xiàn)步驟

  1. 在工程中導(dǎo)入 Lottie 框架。在需要轉(zhuǎn)場的類中,將 Lottie import。因?yàn)?Lottie 實(shí)現(xiàn)的轉(zhuǎn)場實(shí)際上是 Present 的轉(zhuǎn)場,所以設(shè)置將要 Present 的控制器的 transitioningDelegate。實(shí)現(xiàn) UIViewControllerTransitioningDelegate 協(xié)議中的幾個(gè)代理方法,返回利用轉(zhuǎn)場動畫 json 文件初始化的 LOTAnimationTransitionController 的實(shí)例。

ps:Lottie 轉(zhuǎn)場的 LOTAnimationTransitionController 在 3.0.0 版本后被移除,所以需要使用 Lottie 做轉(zhuǎn)場時(shí),需要在導(dǎo)入時(shí),指定版本號為更早的版本。我這里使用的是 2.5.3。

實(shí)例

/// 第一個(gè) VCfunc presentClick(_ sender: Any) { let vc = self.storyboard?.instantiateViewController(withIdentifier: "LottieSecondViewController") vc?.transitioningDelegate = self self.present(vc!, animated: true) {}}/// 實(shí)現(xiàn) UIViewControllerTransitioningDelegate,返回 LOTAnimationTransitionController 的實(shí)例extension LottieFirstViewController: UIViewControllerTransitioningDelegate { func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {  let transitionController = LOTAnimationTransitionController(animationNamed: "Count",                 fromLayerNamed: "",                 toLayerNamed: "",                 applyAnimationTransform: false)  return transitionController } func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {  let transitionController = LOTAnimationTransitionController(animationNamed: "Three",                 fromLayerNamed: "",                 toLayerNamed: "",                 applyAnimationTransform: false)  return transitionController }}

感謝各位的閱讀!關(guān)于“iOS如何自定義轉(zhuǎn)場動畫”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

標(biāo)題名稱:iOS如何自定義轉(zhuǎn)場動畫-創(chuàng)新互聯(lián)
轉(zhuǎn)載來源:http://aaarwkj.com/article36/gddpg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、做網(wǎng)站云服務(wù)器、品牌網(wǎng)站建設(shè)、域名注冊、服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)
国产日韩欧美高清免费视频| 久久久久精品久久久| 日本午夜一区二区在线观看| 亚洲精品国产精品粉嫩av| 丝袜美腿一区二区三区动态图| 中日中文av一区二区三区| 国产熟女一区二区精品视频| 欧美日本国产专区一区| 日本熟妇中文字幕系列| 中文字幕精品高清中国| 久久久久四虎国产精品| 97国产精品成人免费视频| 欧美精品熟妇乱黑人最大| 乱色视频中文字幕在线着| 成人性生交免大片免费| 97超碰国产在线观看| 亚洲熟女精品不卡一区二区| 欧美日韩亚洲一区二区搜索| 少妇高潮一区二区三区在线| 色婷婷亚洲婷婷亚洲最大| 日韩电影在线观看二区| 日韩精品在线观看一| 门国产av一区二区三区| 中文字幕黄色三级视频| 久久精品国产一区二区三区不卡 | 精品国产一区二区成人| 亚洲av中文久久精品国内| 日韩欧美高清一区二区| 亚洲国产99在线精品一区| 国产精品中文第一字幕| 日韩av一区二区国产| 一区二区三区四区在线视频观看| 在线免费观看欧美黄片| 成人综合影视中文字幕| 偷拍一区二区三区夫妻| 亚洲综合日韩精品国产av| 91在线视频国产网站| 国模一区二区三区视频| 欧美高清视频看片在线观看| 女人天堂网av免费看| av网址在线免费观看|