[ Framer教程 ]像学习写文章一样学习Framer编程

之前推送过一些Framer教程,但总觉得缺了点什么。今天想想,直接教大家上手做是不对的。对于很多设计师来说编程还是很神秘的东西,我必须要揭下它神秘的面纱。

揭开它的神秘面纱

要学习Framer,我们先要消除 “编程很难高智商才能玩得溜”的心理障碍。其实,就像写文章一样,编程也是通过一种语言去描述一些东西,你大可以把一段代码看成一篇文章。

以中文写作类比,我们使用的语言是中文,那么使用Framer编程我们使用的是CoffeeScript(这些技术宅取名时不是吃的就是喝的),它是前端脚本语言javascript的一种变形。

CoffeeScript介绍

最开始写作文,老师会告诉我们要遵循一些规则,像首行缩进、陈述句以句号结尾、问句以问号结尾等等。在使用Framer编程时我们也要遵循一些规则,比如使用空白缩进来表示代码块、以“#”开头的语句是注释等。这些规则,你在使用的过程中会逐渐了解。

现在有这么一段文字“在屏幕上画一个蓝色的圆形,当点击它时,它会逐渐变成绿色,同时会变成一个正方形”,我们要把它翻译成Framer能读懂的语言,要实现的效果如下:

最终效果

在开始之前,我们先了解一些概念和基本语法。

Framer和Sketch一样,都是以图层的形式来展现设计。与Sketch不同的是,每个图层除了拥有尺寸、位置、背景色等样式属性以外,还有状态等属性。每个图层可以是其他图层的父图层,也可以是其他图层的子图层,可以看成Sketch的分组。而动效的表现,则是通过不同状态之间的过渡来实现,不同状态间发生变化的属性就会形成一个补间动画。

在Framer的代码里面,有这么一些特殊的符号或词语需要注意,我们拿下面这段代码来举例:

# Set background color
Screen.backgroundColor ="#333"
layerA.onClick(event, layer)->
    layerA.states.switch("stateB")

1、圆点:

代表所属,可以翻译成“的”。

上述代码中Screen.backgroundColor翻译过来就是screen(屏幕)的背景色。需要注意的是,原点后面不仅可以跟属性值,还可以跟一个操作,上述代码中的layerA.onClick翻译过来就是“点击图层A时”。

2、等号:

等号在这里表示赋值,就像数学里面的x=1表示把1赋给了x。上述代码中Screen.backgroundColor=”#333”就把#333这个颜色给了屏幕背景色,即把屏幕背景色设为#333。

3、井号:

井号表示注释,就是给代码做备忘。即使过了很长时间,再通过看注释也能知道这里的代码干了什么。而系统是不会处理注释的,注释只是给人看的。

4、关键词:

所谓关键词,就是Framer中既定的一些关键作用的词,你在命名时不能使用。上述代码中,backgroundColor、onClick、states都是关键词,在Framer编辑器中他们一般是蓝色的。随着学习深入,我们还会接触很多关键词。

关键词

5、函数:

回想一下数学中的函数:f(x,y)=x+y,f(x,y)接收参数x和y,计算x+y后返回结果给f(x,y)。在Framer中函数的概念类似,接受一个或多个参数做处理后返回或者不返回。

一般要先定义函数,就可以到各个地方引用函数了,引用时可以传入不同的参数。

Framer的函数表达式一般这么定义:

sum=( a , b )->
    a + b

它就表示函数sum接收两个参数a和b,计算a+b后返回结果。在引用函数时我们直接写sum(2,3),那么sum(2,3)的值就是5。

6、对象:

终于说到程序员面对的终极问题——对象,在代码里对象是一个集合体,它可以包含一些属性和操作。在创建对象时,使用new关键词,比如创建一个女朋友图层对象:

# Create my girlfriend
girlfriend =new  Layer
    name:"beauty"
    width:60
    height:170

她包含了一些属性:名字叫beauty,宽度是60,高度是170,当我们使用她的某一个属性时,只需要用小圆点就可以啦,比如她的身高就是girlfriend.height。

同时,她还包含一些操作,比如girlfriend.centerX(12)表示让她站在屏幕中央往右偏移12的位置(centerX( )是Framer中定义好的操作,图层对象都有,具体可以查阅文档)。

现在回来看我们的任务:在屏幕上画一个蓝色的圆形,当点击它时,它会逐渐变成绿色,同时会变成一个正方形。

假设这个圆形的半径是80,蓝色为”#14C4FF”,绿色为”#36E43C”,那我们先画一个蓝色的圆形。

在Framer中图层默认是矩形,所以我们可以先画一个正方形,把它的圆角半径设为宽度的一半就变成圆形了。用代码表示就是:

# Create layer
layerA =new  Layer
    width:160
    height:160
    x:240
    y:300
    backgroundColor:"#14C4FF"
    borderRadius:80

我们给它取名layerA,new Layer就是新建一个图层,连起来就是新建一个图层并把它赋给layerA。下面的代码都往后缩进(按tab键缩进)了,它们表示layerA的属性。我们设置宽高为160,x、y是位置,我随便设的,为了把它定在屏幕中央。背景色设为蓝色,圆角半径设为80,在右侧就出现了一个圆:

初始状态:圆形

接下来,我们给它添加一个新的状态。

# Add states
layerA.states.add
    stateB:
        borderRadius:0
        backgroundColor:"#36E43C"

layerA.states.add表示给layerA的状态添加一个,取名为stateB,在该状态下,圆角半径是0,颜色是绿色,就像这样:

状态B:矩形

不过你看不到它变成正方形,因为默认的状态就是开始创建时设置的圆形那个状态。

接下来,我们就要给layerA添加一个点击事件,使它在被点击时从初始状态变换到stateB。代码是这样的:

layerA.onClick(event, layer)->
    layerA.states.switch("stateB")

layerA所包含的操作onClick(event,layer),一直监听layerA是否被点击,当它被点击时就执行layerA.states.switch(“stateB”)的操作,即layerA的状态转换到stateB。

至此,我们就完整的将这句话翻译成Framer能够听懂的语言。你可以自己试一试,写你的第一段代码。

对于CoffeeScript,我也在不断学习,以上如有错误,欢迎指出。如果有任何问题也欢迎在评论区留言。

源代码点这里:https://github.com/leadream/funny/blob/master/framer-primary/app.coffee

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,029评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,238评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,576评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,214评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,324评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,392评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,416评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,196评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,631评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,919评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,090评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,767评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,410评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,090评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,328评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,952评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,979评论 2 351

推荐阅读更多精彩内容

  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌。在这里你可以看...
    F麦子阅读 5,107评论 5 13
  • 书写的很好,翻译的也棒!感谢译者,感谢感谢! iOS-Core-Animation-Advanced-Techni...
    钱嘘嘘阅读 2,294评论 0 6
  • 1.Go对于已声明但未使用的变量会在编译阶段报错: package main func main () {...
    KobeQi阅读 240评论 0 0
  • 世界是由故事组成的 书里是故事 电影里是故事 街上是故事 梦里也是故事 人爱发生故事 更爱听故事 曲折的回味 更无...
    乐行僧阅读 1,295评论 0 1
  • 不管怎么费尽心力,人会受伤的时候就会受伤。——by 村上春树 27岁是个该被诟病的年龄吗?还是27岁还未婚的姑娘该...
    歪杨阅读 427评论 0 1