iOS 雷達掃描效果

最近閑的時候?qū)崿F(xiàn)了一個雷達掃描的效果
效果如下圖

整體效果

前言

  • swift 3.0 實現(xiàn)
  • 了解 Layer anchorPoint 的使用
  • 動畫兩種實現(xiàn)方式
    • CABasicAnimation
    • CGAffineTransform rotationAngle

背景設(shè)置

背景可以是自己 用 view 來實現(xiàn) 或者 draw 一個 圓環(huán) 都不是什么事情
如果要追求 和設(shè)計一樣的效果 就讓美工 來 設(shè)計一套圖
我這里就是一套圖片;
然后 frame 設(shè)置 間隔 就可以

效果如下

背景效果

扇形區(qū)域

扇形區(qū)域是負責(zé)來旋轉(zhuǎn)的, 肯定一張圖片啦
我這里是一張正方形的圖片

如下

扇形圖

把圖片添加進去 并不難, 看起來就是 : 扇形圖片的左上角是圍繞 背景的圓心 來旋轉(zhuǎn)的, 所以 左上角 是對應(yīng)圓心

一開始 我就是這樣的思路
origin x , y 為扇形圖片的 x y 不就好了, 這樣一下就能達到 預(yù)期效果 (下圖) 但是做旋轉(zhuǎn)的時候 就發(fā)現(xiàn) 陷入誤區(qū)了

思考一下是為啥呢?

我們在處理 扇形圖片 進行旋轉(zhuǎn)的時候, 圖片的旋轉(zhuǎn) 是圍繞 圖片 自身 的中心點 來進行旋轉(zhuǎn)的

而 如果按照上面 做的 扇形圖片的 center 按照本身 圖片旋轉(zhuǎn)的效果 肯定不是這樣

所以 我們是要 如何 做到 讓扇形圖 以自己的左上角 來進行旋轉(zhuǎn)的呢 ?

查閱資料 Layer 有個 anchorPoint 屬性

anchorPoint

anchorPoint 是相對于自身的位置
稱為“定位點”也拜、“錨點”
決定著CALayer身上的哪個點會在position屬性所指的位置
它的x、y取值范圍都是0~1车胡,默認值為(0.5, 0.5)
也就是 默認的旋轉(zhuǎn)以 自身 center 點 來進行

借用 淺談Layer兩個屬性position和anchorPoint 一張圖片 大家來分析

根據(jù)分析這里的扇形圖片進行旋轉(zhuǎn) 就是 根據(jù) 錨點 進行的
所以我只需要需改 錨點 為 左上角 anchorPoint (0, 0)
旋轉(zhuǎn) 就會 以左上角 來進行

position和anchorPoint的詳細研究 可以參考這篇文章

研究完 anchorPoint 后就恍然大悟 設(shè)置 anchorPoint (0, 0) 之后
扇形圖的目前 center 是以左上角點 來進行 參考
這時 我只需要讓它的 center 等于 背景圓環(huán)中心 即可
就達到了 如下的效果圖
而且這里我們 做旋轉(zhuǎn)也是以這個 左上角來進行的

扇形圖效果圖

旋轉(zhuǎn)動畫 - CABasicAnimation

        /// CABasicAnimation
        let rotationAnimation = CABasicAnimation(keyPath: "transform.rotation.z")
        rotationAnimation.toValue = Double.pi * 2
        rotationAnimation.duration = 2
        rotationAnimation.isCumulative = true
        rotationAnimation.repeatCount = HUGE
        pie_Pic.layer.add(rotationAnimation, forKey: "rotationAnimation")

直接上代碼 這里好像也沒有什么可以說的了

需要注意的有

  • 旋轉(zhuǎn)是以 Z 軸 旋轉(zhuǎn)
  • Double.pi swift 3.0 的寫法 當(dāng)然 也有 Float.pi 之類的 根據(jù)你取的類型
  • repeatCount 設(shè)置 -1 居然 不會 無限 repeat , 我這里也是很無奈 用了個 HUGE 不知道 還能怎么寫 ? HUGE 很大就是了

旋轉(zhuǎn)動畫 - CGAffineTransform

    func raderAnimation()  {
        UIView.animate(withDuration: 0.1, delay: 0, options: .curveLinear, animations: {
            self.tempImage?.transform = CGAffineTransform.init(rotationAngle: CGFloat.init(Double.pi / 180 * self.angle))
        }) { [unowned self] (true) in
            self.angle += 15
            self.raderAnimation()
        }
    }

這里大致的思路是 每次進行 一定幅度 的旋轉(zhuǎn)
angle 值得 累加
動畫結(jié)束 的 時候 繼續(xù) 調(diào)用函數(shù) 就能 持續(xù) 執(zhí)行動畫函數(shù)了
這里的 angle 可以進行調(diào)整 動畫就會 執(zhí)行的 比較平順

雨點效果

雨點的效果比較簡單
幾張圖片的 播放

 /// point images
        let point_Pic = UIImageView.init(frame: screenFrame)
        let imagesArray = NSMutableArray()
        for i in 1 ... 7 {
            let imageName = "radarpoint\(i)_6.png"
            let image = UIImage.init(named: imageName)
            if (image != nil) {
             imagesArray.add(image!)
            }
        }
        point_Pic.animationImages = imagesArray as? [UIImage]
        point_Pic.animationDuration = 1
        point_Pic.animationRepeatCount = -1
        point_Pic.startAnimating()
        self.view.addSubview(point_Pic)

最后 添加個頭像 最終的 效果就出來啦

最終效果

結(jié)尾

實現(xiàn)這個效果并不難
主要是溫習(xí)一下 CABasicAnimation 和 CGAffineTransform 一些 基本使用
同時 又學(xué)到了 anchorPoint 的使用 偶爾 再寫寫 文章 讓自己 鞏固 一下
關(guān)于這個動畫 如果有更好 的實現(xiàn)效果方式
歡迎 給我留言 留下鏈接 我會去看的
如果本篇文章有錯誤的地方 還請麻煩指正

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末庄敛,一起剝皮案震驚了整個濱河市存皂,隨后出現(xiàn)的幾起案子西潘,更是在濱河造成了極大的恐慌,老刑警劉巖宣脉,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異剔氏,居然都是意外死亡塑猖,警方通過查閱死者的電腦和手機竹祷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來羊苟,“玉大人塑陵,你說我怎么就攤上這事±” “怎么了令花?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長凉倚。 經(jīng)常有香客問我兼都,道長,這世上最難降的妖魔是什么稽寒? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任扮碧,我火速辦了婚禮,結(jié)果婚禮上杏糙,老公的妹妹穿的比我還像新娘慎王。我一直安慰自己,他們只是感情好宏侍,可當(dāng)我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布赖淤。 她就那樣靜靜地躺著,像睡著了一般负芋。 火紅的嫁衣襯著肌膚如雪漫蛔。 梳的紋絲不亂的頭發(fā)上嗜愈,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天旧蛾,我揣著相機與錄音,去河邊找鬼蠕嫁。 笑死锨天,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的剃毒。 我是一名探鬼主播病袄,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼赘阀!你這毒婦竟也來了益缠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤基公,失蹤者是張志新(化名)和其女友劉穎幅慌,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體轰豆,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡胰伍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年齿诞,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片骂租。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡祷杈,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出渗饮,到底是詐尸還是另有隱情但汞,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布互站,位于F島的核電站特占,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏云茸。R本人自食惡果不足惜是目,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望标捺。 院中可真熱鬧懊纳,春花似錦、人聲如沸亡容。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽闺兢。三九已至茂缚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間屋谭,已是汗流浹背脚囊。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留桐磁,地道東北人悔耘。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像我擂,于是被迫代替她去往敵國和親衬以。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,465評論 2 348

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

  • 在iOS中隨處都可以看到絢麗的動畫效果校摩,實現(xiàn)這些動畫的過程并不復(fù)雜看峻,今天將帶大家一窺iOS動畫全貌。在這里你可以看...
    F麥子閱讀 5,101評論 5 13
  • 在iOS中隨處都可以看到絢麗的動畫效果衙吩,實現(xiàn)這些動畫的過程并不復(fù)雜互妓,今天將帶大家一窺ios動畫全貌。在這里你可以看...
    每天刷兩次牙閱讀 8,469評論 6 30
  • 在iOS實際開發(fā)中常用的動畫無非是以下四種:UIView動畫,核心動畫车猬,幀動畫霉猛,自定義轉(zhuǎn)場動畫。 1.UIView...
    請叫我周小帥閱讀 3,082評論 1 23
  • Core Animation Core Animation珠闰,中文翻譯為核心動畫惜浅,它是一組非常強大的動畫處理API,...
    45b645c5912e閱讀 3,016評論 0 21
  • 這是一個寂寞的時代伏嗜,所以人們都在熱衷吵鬧狂歡坛悉,時代的挽歌者注定要被孤立開來!這看似是時代的悲哀承绸,但某種程度上...
    龍以閱讀 230評論 0 0