日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于iOS里的做动画方法的差别与注意事项

發(fā)布時(shí)間:2023/12/10 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于iOS里的做动画方法的差别与注意事项 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

CoreAnimation與UIView.animation...

這兩個(gè)方式的主要差別在于,前者如果不主動設(shè)置,那么在動畫做完以后,會恢復(fù)原狀。
后者則不會,動畫做完后是什么樣,控件就是什么樣。

UIView.animation...是什么

首先我們來做一個(gè)動畫

UIView.animate(withDuration: 5, animations: {self.moveView.frame.origin.y += 200 })

這個(gè)動畫是讓moveView在Y軸上移動200個(gè)點(diǎn)。

  • 我們在動畫代碼前,打印一下這個(gè)控件的frame信息 (155.0, 140.0, 64.0, 64.0)
  • 然后我們在動畫開始2秒和動畫結(jié)束時(shí)打印一下frame信息,讓人疑惑的是結(jié)果都為 (155.0, 340.0, 64.0, 64.0)
  • 我們先停一下,去看看CoreAnimation
  • CoreAnimation

    使用CA動畫時(shí),主要是使用的CAAnimation的子類(下面簡稱 anim )。
    anim 是添加到Layer上的,你可以在layer上訪問添加到該layer的 anim 。好的,現(xiàn)在我們做一個(gè)和上面一樣的Y軸上的位移動畫。

  • 在動畫開始后的2秒打印一下frame和layer.frame信息,都是 (155.0, 140.0, 64.0, 64.0)
  • 在2秒時(shí)打印animationKeys, Optional(["position"])
  • 動畫結(jié)束后,控件恢復(fù)到了原狀,animationKeys為 nil
  • 我們把a(bǔ)nim改成動畫結(jié)束后保持結(jié)束時(shí)狀態(tài)再看看1-3點(diǎn)的信息
  • frame和layer.frame信息,也還都是 (155.0, 140.0, 64.0, 64.0)
  • 在2秒時(shí)打印animationKeys, Optional(["position"])
  • 動畫結(jié)束后,控件恢復(fù)到了原狀,animationKeys為 Optional(["position"])
  • 此時(shí)我們使用Xcode的視圖調(diào)試工具查看,控件位置在 (155.0, 140.0, 64.0, 64.0) ,并且調(diào)試界面的位置和APP上的位置完全不一樣。
  • CoreAnimation動畫的注意事項(xiàng)

    怎么獲取正在移動時(shí)的位置呢,如果有一個(gè)需求是要拿到實(shí)際運(yùn)動的位置,該怎么辦?
    使用 presentation 屬性
    在CA動畫里,所有的實(shí)時(shí)狀態(tài)都會反應(yīng)到這個(gè)屬性返回的layer上,本體layer在動畫時(shí)會被 隱藏 !

  • 現(xiàn)在我們根據(jù)剛才的 anim 動畫查看一下 presentation 的信息。
  • 果然,控件位置的實(shí)時(shí)信息是反應(yīng)在這個(gè)layer上的
  • 回過來看UIView.animation...

    我們在動畫進(jìn)行時(shí)打印 presentation 的信息,打印的frame信息竟然能夠正確反應(yīng)當(dāng)前控件的位置情況。
    我們再打印 animationKeys 信息看看, Optional(["position"]) 。
    我想答案已經(jīng)呼之欲出了。 UIView.animation... 使用的是 CoreAnimation 在做動畫,只是細(xì)節(jié)對程序員隱藏了。

    兩者的區(qū)別上需要注意的地方

    但是還有一個(gè)問題,剛才的打印結(jié)果,_UIView.animation..._ 結(jié)束后,frame信息為 (155.0, 340.0, 64.0, 64.0) ,而 anim 結(jié)束后為 (155.0, 140.0, 64.0, 64.0) ,但是 anim 的 presentation 的frame卻是正確的。
    這意味著你如果要在 anim 動畫后讓控件移動到正確的位置,你需要把控件的frame也設(shè)置到正確到位置,而不只是在 anim 上設(shè)置。
    那什么時(shí)候設(shè)置是一個(gè)正確到時(shí)機(jī)呢?我們注意到,在開始做動畫到時(shí)候,屏幕上現(xiàn)實(shí)的視圖,實(shí)際上是顯示的 presentation 的信息,而不依賴于控件本身的layer。所以在做動畫前后都能去設(shè)置控件本身到正確的屬性。

    總結(jié)

    以上是生活随笔為你收集整理的关于iOS里的做动画方法的差别与注意事项的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。