Framer教程 | 做一個(gè)酷酷的彈出式菜單

先看效果:

最終效果

我們分析一下這個(gè)效果囤踩,就是在點(diǎn)擊圓形按鈕時(shí)珍特,彈出另外四個(gè)按鈕祝峻。與此同時(shí),這個(gè)觸發(fā)按鈕的顏色會(huì)變灰,里面的加號(hào)會(huì)旋轉(zhuǎn)45度變成一個(gè)叉莱找,背景也會(huì)變模糊酬姆。

在Framer中,我準(zhǔn)備這樣實(shí)現(xiàn)它:初始狀態(tài)下四個(gè)按鈕在觸發(fā)按鈕之下被擋住奥溺,彈出狀態(tài)下四個(gè)按鈕彈出辞色,觸發(fā)按鈕背景變灰色,加號(hào)旋轉(zhuǎn)45度浮定,背景圖層變模糊相满。當(dāng)點(diǎn)擊觸發(fā)按鈕時(shí),在初始狀態(tài)和彈出狀態(tài)之間切換桦卒。

我們先用PS準(zhǔn)備一下素材立美,主要就是背景、四個(gè)彈出的按鈕和一個(gè)加號(hào)闸盔。為什么觸發(fā)按鈕沒(méi)有直接做出來(lái)呢悯辙?因?yàn)樗谋尘吧珪?huì)變化琳省,我們直接用代碼來(lái)寫(xiě)會(huì)更好控制迎吵。

準(zhǔn)備素材

先把背景拖進(jìn)去,就是左邊那個(gè)列表针贬。這時(shí)在Framer左邊就會(huì)出現(xiàn)一段代碼击费,右邊也會(huì)出現(xiàn)這個(gè)背景圖(我按照iPhone6的大小做的,所以設(shè)備選擇iPhone剛好鋪滿(mǎn)):

把背景拖進(jìn)去

這段代碼會(huì)自動(dòng)新建一個(gè)圖層桦他,并以圖片名稱(chēng)命名蔫巩。但是現(xiàn)在我們要自己多寫(xiě)一段代碼,來(lái)給它添加一個(gè)菜單彈出時(shí)背景模糊的狀態(tài):

#創(chuàng)建背景圖層
bg = new Layer
    width: 750
    height: 1334
    image: "images/bg.png"
#給背景圖層新增一個(gè)狀態(tài)快压,叫bgBlur
bg.states.add
     bgBlur:
         blur:12

接下來(lái)畫(huà)觸發(fā)按鈕圆仔,起名為“btnAdd”,我們直接用代碼來(lái)寫(xiě)蔫劣。新建一個(gè)圖層賦給btnAdd坪郭,把它的寬高都設(shè)為156,圓角半徑設(shè)為邊長(zhǎng)的一半即78脉幢,背景色設(shè)為“#f75534”歪沃,就是紅色。

#創(chuàng)建觸發(fā)按鈕
btnAdd = new Layer
    width: 156
    height: 156
    borderRadius: 78
    backgroundColor: '#f75534'

然后點(diǎn)擊代碼左側(cè)的那個(gè)正方形小按鈕嫌松,切換到設(shè)計(jì)模式沪曙,在右側(cè)拖動(dòng)剛剛畫(huà)好的觸發(fā)按鈕到底部中間位置,它的代碼就會(huì)出現(xiàn)x萎羔、y兩個(gè)屬性液走,這是根據(jù)你拖動(dòng)的位置自動(dòng)計(jì)算出來(lái)的。需要注意的是,x缘眶、y坐標(biāo)值和我們平面幾何學(xué)過(guò)的不太一樣腻窒,這個(gè)坐標(biāo)系的原點(diǎn)是設(shè)備屏幕左上角那一點(diǎn),向右為x軸正方向磅崭,向下為y軸正方向儿子。

拖動(dòng)圖層

現(xiàn)在看起來(lái)像這樣:

居中

別忘了我們還要給他增加一個(gè)菜單彈出時(shí)變灰的狀態(tài),所以代碼就變成這樣:

#創(chuàng)建觸發(fā)按鈕
btnAdd = new Layer
    width: 156
    height: 156
    borderRadius: 78
    backgroundColor: '#f75534'
#給觸發(fā)按鈕增加一個(gè)狀態(tài)叫
greybtnAdd.states.add
    grey:
        backgroundColor: '#AAA'

接下來(lái)我們要把白色的加號(hào)放進(jìn)觸發(fā)按鈕中砸喻,所以我們直接把加號(hào)拖進(jìn)來(lái)柔逼,放到觸發(fā)按鈕正中間。因?yàn)樗鼈兪且惑w的割岛,所以我們?cè)O(shè)置它的父圖層為觸發(fā)按鈕“btnAdd”愉适,只需要設(shè)置它的superLayer為btnAdd就可以啦。

同時(shí)也別忘了給他新增一個(gè)狀態(tài)癣漆,讓它旋轉(zhuǎn)變成叉叉维咸。

#創(chuàng)建加號(hào)
plus = new Layer
    superLayer: btnAdd
    width: 50
    height: 50
    image: "images/plus.png"
    y: 54
    x: 53
#給加號(hào)添加一個(gè)狀態(tài),叫
rotateplus.states.add
    rotate:
        rotation: 45

剩下的四個(gè)彈出按鈕惠爽,一個(gè)個(gè)添加會(huì)很麻煩癌蓖,代碼也會(huì)很長(zhǎng)。這時(shí)候代碼的優(yōu)勢(shì)就體現(xiàn)出來(lái)啦婚肆!我們使用一種神奇的魔法叫做“循環(huán)”租副。

循環(huán)排列

所謂循環(huán),就是重復(fù)地做一件事情较性,這里就是重復(fù)地創(chuàng)建一個(gè)圖層用僧,把它的背景設(shè)為一張圖片,同時(shí)按位置擺放好赞咙。

在循環(huán)之前责循,我們先寫(xiě)一句btn = [ ],表明btn現(xiàn)在是一個(gè)數(shù)組攀操,里面可以存放一組東西院仿,用它來(lái)存放這四個(gè)按鈕。

接下來(lái)崔赌,繼續(xù)寫(xiě)上for i in [0..3]意蛀,表示開(kāi)始數(shù)數(shù),并用i記錄下當(dāng)前數(shù)字健芭,而數(shù)數(shù)的范圍是0到3县钥,一共四個(gè)。為什么從0開(kāi)始呢慈迈?這個(gè)小孩沒(méi)娘若贮,說(shuō)來(lái)話(huà)長(zhǎng)省有,我們先不說(shuō),反正你就記著計(jì)算機(jī)數(shù)數(shù)都是從0開(kāi)始谴麦。

然后按tab鍵縮進(jìn)一格蠢沿,在這里新建一個(gè)圖層,寬高和觸發(fā)按鈕一樣都設(shè)為156匾效,坐標(biāo)x和坐標(biāo)y也和觸發(fā)按鈕一樣舷蟀。這里使用的是btn[i]來(lái)存每一次創(chuàng)建的圖層,表示btn數(shù)組第i個(gè)元素是某一個(gè)圖層面哼。

# 創(chuàng)建四個(gè)按鈕
btn[i] = new Layer
    width: 156
    height: 156
    x:297
    y:1136

但是圖片要名稱(chēng)要?jiǎng)討B(tài)變化了野宜,還記得上面說(shuō)的數(shù)到幾就用i記下來(lái),所以我們用"images/btn"+i+".png"來(lái)表示當(dāng)前圖片魔策。加號(hào)在這里表示連接字符匈子,例如當(dāng)數(shù)到最后一個(gè)的時(shí)候,i等于3,上面圖片鏈接就變成了“images/btn3.png”闯袒。

   image: "images/btn"+i+".png"

記得圖片要命名成btn0虎敦、btn1、btn2政敢、btn3才可以被正確讀取其徙。

緊接著我們要給這四個(gè)按鈕每一個(gè)都加一個(gè)狀態(tài)popUp,所以接在后面寫(xiě)下這段代碼:

btn[i].states.add
    popUp:
        x:297
        y: i*176+428

可以看到堕仔,y也是動(dòng)態(tài)計(jì)算的擂橘,因?yàn)閺棾鰰r(shí)四個(gè)按鈕縱向的坐標(biāo)都是不一樣的。最終摩骨,這四個(gè)按鈕的代碼是:

btn = []
#創(chuàng)建四個(gè)按鈕
for i in [0..3]
    btn[i] = new Layer
        width: 156
        height: 156
        x:297
        y:1136
        image: "images/btn"+i+".png"
#給每個(gè)按鈕添加新?tīng)顟B(tài)
    btn[i].states.add
        popUp:
            x:297
            y: i*176+428

記得把這一段代碼移到觸發(fā)按鈕的代碼前面,這樣最開(kāi)始它們才可以被觸發(fā)按鈕擋住朗若。

最后一步恼五,就是添加觸發(fā)事件了。點(diǎn)擊左上角的“+”哭懈,選擇Event->btnAdd->Click->Click就會(huì)加上一段代碼:

btnAdd.onClick (event, layer) ->
添加事件

我們只需要接在后面寫(xiě)上各個(gè)圖層的狀態(tài)切換到下一個(gè)的代碼灾馒,就可以了。

#點(diǎn)擊按鈕遣总,觸發(fā)按鈕變灰色睬罗,加號(hào)旋轉(zhuǎn),彈出菜單旭斥,模糊背景
btnAdd.onClick (event, layer) ->
    bg.states.next()
    btnAdd.states.next()
    plus.states.next()
    btn[0].states.next()
    btn[1].states.next()
    btn[2].states.next()
    btn[3].states.next()

這樣我們就完成了這個(gè)彈出式菜單容达,但是點(diǎn)擊時(shí)彈出菜單的效果可能和下面的效果不太一樣,你需要自己微調(diào)一下彈性曲線(xiàn)垂券,我設(shè)置的是spring(90,13,10)花盐,你可以把下面這幾行代碼放在最開(kāi)頭,慢慢去試。

Framer.Defaults.Animation = curve: "spring(90,13,10)"
最終效果

源碼鏈接戳這里

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末算芯,一起剝皮案震驚了整個(gè)濱河市柒昏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌熙揍,老刑警劉巖职祷,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異届囚,居然都是意外死亡堪旧,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)奖亚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)淳梦,“玉大人,你說(shuō)我怎么就攤上這事昔字”郏” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵作郭,是天一觀(guān)的道長(zhǎng)陨囊。 經(jīng)常有香客問(wèn)我,道長(zhǎng)夹攒,這世上最難降的妖魔是什么蜘醋? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮咏尝,結(jié)果婚禮上压语,老公的妹妹穿的比我還像新娘。我一直安慰自己编检,他們只是感情好胎食,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著允懂,像睡著了一般厕怜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蕾总,一...
    開(kāi)封第一講書(shū)人閱讀 51,462評(píng)論 1 302
  • 那天粥航,我揣著相機(jī)與錄音,去河邊找鬼生百。 笑死递雀,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的置侍。 我是一名探鬼主播映之,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼拦焚,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了杠输?” 一聲冷哼從身側(cè)響起赎败,我...
    開(kāi)封第一講書(shū)人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蠢甲,沒(méi)想到半個(gè)月后僵刮,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鹦牛,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年搞糕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片曼追。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡窍仰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出礼殊,到底是詐尸還是另有隱情驹吮,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布晶伦,位于F島的核電站碟狞,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏婚陪。R本人自食惡果不足惜族沃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望泌参。 院中可真熱鬧脆淹,春花似錦、人聲如沸及舍。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)锯玛。三九已至,卻和暖如春兼蜈,著一層夾襖步出監(jiān)牢的瞬間攘残,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工为狸, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留歼郭,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓辐棒,卻偏偏與公主長(zhǎng)得像病曾,于是被迫代替她去往敵國(guó)和親牍蜂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

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

  • *7月8日上午 N:Block :跟一個(gè)函數(shù)塊差不多泰涂,會(huì)對(duì)里面所有的內(nèi)容的引用計(jì)數(shù)+1鲫竞,想要解決就用__block...
    炙冰閱讀 2,486評(píng)論 1 14
  • 《ijs》速成開(kāi)發(fā)手冊(cè)3.0 官方用戶(hù)交流:iApp開(kāi)發(fā)交流(1) 239547050iApp開(kāi)發(fā)交流(2) 10...
    葉染柒丶閱讀 5,139評(píng)論 0 7
  • 去年年前,寫(xiě)過(guò)一篇關(guān)于三個(gè)室友的文章逼蒙,題名為《和我睡了四年的他們》从绘,好朋友劉看完之后反問(wèn):“為什么沒(méi)有寫(xiě)到我?”是牢,...
    跑來(lái)跑去的強(qiáng)子閱讀 363評(píng)論 0 1
  • 終于有時(shí)間記錄下寶寶最近的成長(zhǎng)了僵井。最明顯的一個(gè)成長(zhǎng)是開(kāi)始有了思維邏輯性和思維關(guān)聯(lián)。比如我問(wèn)他冷不冷驳棱,他說(shuō):不冷批什,沒(méi)...
    薄小寶閱讀 268評(píng)論 0 0
  • 增生性骨關(guān)節(jié)病是指由于關(guān)節(jié)退行性變,以致關(guān)節(jié)軟骨被破壞而引起的慢性關(guān)節(jié)病社搅。又稱(chēng)退化性關(guān)節(jié)炎驻债,骨關(guān)節(jié)炎及肥大性關(guān)節(jié)炎...
    紅火太陽(yáng)閱讀 386評(píng)論 0 0