使用 UIView 的 animateWithDuration 方法制作簡易動畫

本文是《巧用UIView輔助開發(fā)》文集的第二篇琉预,從最簡單的UIView開始佩谷,學習iOS開發(fā)中的一點經驗技巧奥喻。

文集第一篇戳 手把手教你如何同時繪制圓角和陰影慕嚷。

原文鏈接:http://www.reibang.com/p/f9ac729758e0

效果圖

廢話少說哥牍,先上效果圖:

動畫效果
動畫效果

demo的源碼和圖片資源戳 https://github.com/caiyue1993/RolitaCircle

實現的效果主要使用的是 UIView 的 animateWithDuration 方法。UIView可以通過設置transform屬性做變換喝检,但實際上它只是封裝了內部圖層的變換嗅辣。

蘋果官方文檔中對 animateWithDuration 方法的介紹如圖:

關于animateWithDuration的介紹
關于animateWithDuration的介紹

注意看劃線的部分,我們在傳給 animations 參數的 block 可以programmatically change any animatable properties of views in your view hierarchy 挠说。翻譯成中文就是澡谭,我們可以在這個block中對視圖中 animatable 的屬性進行更改,從而可以產生動畫效果损俭。

至于哪些屬性是 animatable 的蛙奖,只要 command 鍵點擊屬性去看即可潘酗,如圖:

查看animatable屬性
查看animatable屬性

使用貝賽爾曲線畫圓

關于貝賽爾曲線在這篇文章中就不介紹了,參見官方文檔 UIBezierPath Class Reference雁仲。

使用貝賽爾曲線畫圓仔夺,首先,我們可以建立一個Button的子類(不妨命名成LolitaCircleButton)用來繪制特定顏色的圓按鈕(加上陰影)攒砖,代碼如下:

    override func drawRect(rect: CGRect) {
        super.drawRect(rect)
        let path = UIBezierPath(ovalInRect: rect)
        color.setFill()
        path.fill()
    }

現在的效果如圖所示:

使用貝賽爾曲線畫圓
使用貝賽爾曲線畫圓

當我們點擊按鈕時缸兔,給按鈕加上縮小的動畫效果:

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        super.touchesBegan(touches, withEvent: event)

        color = UIColor.whiteColor()
        setNeedsDisplay()

        UIView.animateWithDuration(0.15) {
            self.transform = CGAffineTransformMakeScale(0.9, 0.9)
        }
    }

當釋放按鈕時,加上回收的效果祭衩,還是直接上代碼吧:

override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
        super.touchesEnded(touches, withEvent: event)

        color = UIColor.orangeColor()
        setNeedsDisplay()

        transform = CGAffineTransformMakeScale(0.0, 0.0)

        UIView.animateWithDuration(0.4, delay: 0, usingSpringWithDamping: 0.7, initialSpringVelocity: 0.5, options: [], animations: {
            self.transform = CGAffineTransformIdentity
            // CGAffineTransformIdentity也可替換成CGAffineTransformMakeScale(1.0, 1.0)
            }, completion: nil)
    }

然后加上按鈕在normal狀態(tài)和highlighted狀態(tài)顯示的圖片灶体。

func commonInit() {
       setImage(UIImage(named: self.imageURL)?.imageWithColor(self.color), forState: .Highlighted)
       setImage(UIImage(named: self.imageURL), forState: .Normal)
   }
// 其中imageURL是初始化時外部傳入的圖片地址

這樣,開頭的按鈕動畫就完成了掐暮。具體的實現細節(jié)蝎抽,請戳下面的鏈接。

Gist 地址: BubblePop

《巧用UIView輔助開發(fā)》系列第二篇就寫到這里路克。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末樟结,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子精算,更是在濱河造成了極大的恐慌瓢宦,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,002評論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件灰羽,死亡現場離奇詭異驮履,居然都是意外死亡,警方通過查閱死者的電腦和手機廉嚼,發(fā)現死者居然都...
    沈念sama閱讀 95,357評論 3 400
  • 文/潘曉璐 我一進店門玫镐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人怠噪,你說我怎么就攤上這事恐似。” “怎么了傍念?”我有些...
    開封第一講書人閱讀 169,787評論 0 365
  • 文/不壞的土叔 我叫張陵矫夷,是天一觀的道長。 經常有香客問我憋槐,道長双藕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,237評論 1 300
  • 正文 為了忘掉前任阳仔,我火速辦了婚禮蔓彩,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己赤嚼,他們只是感情好旷赖,可當我...
    茶點故事閱讀 69,237評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著更卒,像睡著了一般等孵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蹂空,一...
    開封第一講書人閱讀 52,821評論 1 314
  • 那天俯萌,我揣著相機與錄音,去河邊找鬼上枕。 笑死咐熙,一個胖子當著我的面吹牛,可吹牛的內容都是我干的辨萍。 我是一名探鬼主播棋恼,決...
    沈念sama閱讀 41,236評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼锈玉!你這毒婦竟也來了爪飘?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 40,196評論 0 277
  • 序言:老撾萬榮一對情侶失蹤拉背,失蹤者是張志新(化名)和其女友劉穎师崎,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體椅棺,經...
    沈念sama閱讀 46,716評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡犁罩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,794評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了两疚。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片床估。...
    茶點故事閱讀 40,928評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖鬼雀,靈堂內的尸體忽然破棺而出顷窒,到底是詐尸還是另有隱情蛙吏,我是刑警寧澤源哩,帶...
    沈念sama閱讀 36,583評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站鸦做,受9級特大地震影響励烦,放射性物質發(fā)生泄漏。R本人自食惡果不足惜泼诱,卻給世界環(huán)境...
    茶點故事閱讀 42,264評論 3 336
  • 文/蒙蒙 一坛掠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦屉栓、人聲如沸舷蒲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽牲平。三九已至,卻和暖如春域滥,著一層夾襖步出監(jiān)牢的瞬間纵柿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評論 1 274
  • 我被黑心中介騙來泰國打工启绰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留昂儒,地道東北人。 一個月前我還...
    沈念sama閱讀 49,378評論 3 379
  • 正文 我出身青樓委可,卻偏偏與公主長得像渊跋,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子撤缴,可洞房花燭夜當晚...
    茶點故事閱讀 45,937評論 2 361

推薦閱讀更多精彩內容

  • 在iOS中隨處都可以看到絢麗的動畫效果刹枉,實現這些動畫的過程并不復雜,今天將帶大家一窺iOS動畫全貌屈呕。在這里你可以看...
    F麥子閱讀 5,119評論 5 13
  • 在iOS中隨處都可以看到絢麗的動畫效果微宝,實現這些動畫的過程并不復雜,今天將帶大家一窺ios動畫全貌虎眨。在這里你可以看...
    每天刷兩次牙閱讀 8,517評論 6 30
  • 目錄 ** UIView 動畫 ** ** Core Animation ** ** FaceBook POP動畫...
    方向_4d0d閱讀 1,608評論 0 3
  • 前言: UIVIew Animation 是 iOS 提供的最基礎的一組用于實現 UIView 動畫的類庫蟋软。在 U...
    謝謝生活閱讀 3,291評論 0 5
  • 在iOS實際開發(fā)中常用的動畫無非是以下四種:UIView動畫,核心動畫嗽桩,幀動畫岳守,自定義轉場動畫。 1.UIView...
    請叫我周小帥閱讀 3,117評論 1 23