waychang
Framer Taiwan
Published in
6 min readMay 6, 2016

--

Framer Tips — Responsive for multiple devices

使用 Framer 製作 Prototype 通常會有兩種做法:

  1. 是 import from Sketch/Photoshop
  2. 另一種則是直接在 Framer 從頭開始建構

而這篇文章的技巧是適用於 2. ,當你想在 Framer 從零開始製作時,於一開始的設定方法。

一般作法

通常在使用 Framer 製作時,最一開始會先選定一個裝置,它的長寬比會是你製作 UI 時的預設,比如像我們在製作 iOS Phone 的 UI 時,會以 750 x 1334 (px) 為 1x 的設定,那之後在 Framer 製作時,就會先選定 iPhone6s 作為預設裝置。(如下圖)

然後,你接下來所建構的每一個東西,都是基於此 750 x 1334 (px) 的設定,像是左圖的 “ui” Layer。(如下圖)

但是,這會有個問題,你會在哪些裝置上預覽跟操作?或者,你是否會分享 Framer Link 給其他人使用?而他們所使用的裝置,是否都剛好跟你預設解析度一樣?如果不是,那會發生什麼事?

如你所見,上圖三種裝置(iPhone6sPlus、Samsung Note5、HTC One A9)所顯示的內容都是沒有填滿螢幕的!

所以,接下來的方法,就是能夠讓你所製作的內容,可以在多數手機裝置上正確顯示(填滿畫面)。

Responsive 的方法

事實上方法不只一種,我自己有使用過兩種方式,此篇會先分享其中之一。

這兩種方法都跟「比例」很有相關。

首先一定要知道的基本數值就是你所定義的預設長寬,延續上面的舉例,就是 750 x 1334 。所以在 Framer 裡的定義大概可以像下面這樣:

default_w = 750
default_h = 1334

第二個要知道的是,將會在哪些裝置上顯示,它們的解析度為何?舉例:

  • iPhone6sPlus:1242 x 2208
  • Samsung Note5:1440 x 2560
  • HTC One A9:1920 x 1080
  • … and more

嗯⋯沒錯,解析度超多種,但不用擔心,這件事我們讓 Framer 告訴我們:

screen_width = Framer.Device.screen.width 
screen_height = Framer.Device.screen.height

接下來,就是最重要的「比例」了!就是用「顯示的螢幕解析度」除以「你所定義的預設解析度」,用寬或用高都可以,以寬來舉例:

ratio = screen_width / default_w

下一步就是要建立一個大容器,並且讓他能夠在不同裝置上填滿螢幕顯示,姑且叫它為「all」:

all = new Layer
width: default_w # <-- 等於你所定義的預設寬 750
height: default_h # <-- 等於你所定義的預設寬 1334
scale: ratio # <-- 比例用在這,乘以這個差異來填滿畫面
originY: 0 # <-- scaleY 縮放的預設 pivot 是正中心,改為最上緣
y: 0 # <-- 接著就把縮放的起始設為最上緣
all.centerX() # <-- 水平置中

有了「all」這個大容器,接下來就把你所製作的內容(content)放在裡面吧!( parent: all )

content = new Layer
parent: all

到這邊,基本上就完成了,但是還有個小問題,就是在 Framer 裡讓 layer 縮放 scale 變大後,會讓 layer 變得糊糊的,所以必須要用上 force2d 這個 layer 屬性,設為 true 之後就不會變糊了。而為了接下來不必在每個 layer 的設定中都要特地加上去,所以可以先把它設定為預設,方法如下:

Framer.Defaults.Layer.force2d = true

記得這行要放到「all」layer 之前。

不過 force2d = true 還是有可能會遇到無法顯示的情況,到時再特地為該 layer 加上 force2d = false 的設定。

最終結果:

沒錯,不管它們本來的解析度為何,全部都變成用你所定義的預設解析度,乘以相對比例~縮放填滿了整個畫面!

Framer Studio 的 code:

Scale Responsive 的限制

如果你的預設解析度的長寬比為 1.778(1334/750),那麼能夠 100% 完全填滿顯示的裝置長寬比也同樣是 1.778

1334 / 750 ≒ 1242 / 2208 ≒ 1440 / 2560 ≒ 1920 / 1080 ≒ 1.778

所以如果選擇用 iPad 預覽,就會發現下緣被切掉(擋住)。( 2048 / 1536 ≒ 1.333 )

但是「某些項目」也是有方法可以避免,以「Bottom Tab」為例,它的位置邏輯是:

「 Tab最下緣」 等於 「螢幕顯示的最下緣」

tab.maxY = screen_height ( 就是 Framer.Device.screen.height )

這樣就可以正確顯示了。

最後,放上

Framer Project: http://share.framerjs.com/6kxw7hu612oi/

( 之後有機會再分享另一種方式⋯⋯ )

岔題,如果有人有 Dribbble 的 Invitation ,覺得我的作品還行的話( behance ),希望能獲得好心人的邀請,我會非常感激的,謝謝!^^

Dribbble ID: waychang

--

--