Framer 튜토리얼: 프로토타입을 개선하기 위한 7가지 간단한 마이크로인터랙션

게시 됨: 2022-03-11

Framer 튜토리얼 시리즈의 두 번째 기사에 오신 것을 환영합니다. 지난 기사에서 우리는 디자인 모드에서 Framer를 사용하는 기본 사항과 디자인에 생명을 불어넣는 간단한 코드를 작성하는 방법에 대해 배웠습니다. 이 글에서는 Framer를 사용하여 마이크로인터랙션 및 애니메이션 전환을 만드는 데 중점을 둘 것입니다. 프로토타입을 위한 7가지 유용한 상호 작용을 만드는 방법을 살펴보겠습니다.

작은 상호작용을 프로토타입해야 하는 이유는 무엇입니까?

부드러운 움직임, 상태 변경 및 미묘한 전환은 특정 작업에 대한 피드백을 제공하여 사용자가 인터페이스 사용 방법을 이해하는 데 도움이 됩니다. 종종 이러한 전환은 실제 아날로그(예: 스위치 제어 슬라이딩)를 반영하거나 일반적인 장치 상호 작용 패턴(예: 탭하여 확장)을 활용합니다. 이 튜토리얼에서는 인터페이스에 마무리 터치를 추가하여 사용자의 이해를 돕고 즐거움을 주는 상호 작용에 중점을 둘 것입니다.

아래의 예를 살펴보십시오. 전 세계의 디자이너들은 다양한 제품에서 이러한 마이크로인터랙션을 만들고 있습니다.

  • 마이크로인터랙션의 예
  • 마이크로인터랙션의 예
  • 마이크로인터랙션의 예

7가지 프로토타입

이 튜토리얼에서는 각 마이크로인터랙션에 대한 개요와 일부 코드 조각을 제공합니다. 우리는 몇 가지 다른 기술을 사용할 것이므로 귀하의 제품에 가장 적합한 기술을 선택할 수 있습니다. Framer Studio 내에서 무엇이든 만드는 "올바른" 방법은 없습니다. 이전 기사에서 언급했듯이 Framer는 원하는 방식으로 만들 수 있는 많은 자유를 제공합니다.

모든 상호 작용 디자인이 포함된 Framer의 대지

이전에 이와 같은 상호 작용을 본 적이 있습니까? 물론입니다! 스마트폰에서 매일 볼 수 있습니다. 이제 나만의 콘텐츠를 만들 차례입니다.

1. 액션 버튼

작업 버튼은 종종 현재 화면의 주요 작업을 나타냅니다. 때로는 내부에 여러 작업이 포함되어 있습니다. 두 번째 경우에 대한 상호 작용을 생성합니다. 여기에서 작업 프로토타입을 다운로드하십시오: https://framer.cloud/ShBnH

영상

1단계: 세 개의 원형 버튼 만들기

시작하려면 내부에 아이콘이 있는 하나의 기본 원 모양 버튼을 만들고 기본 버튼 아래에 두 개의 작은 버튼을 만듭니다. 디자인 모드에서 이러한 모든 레이어를 대화형으로 표시하는 것을 잊지 마십시오(대상 표시기 사용).

Framer 디자인 모드의 생성 과정

2단계: 모든 레이어에 대해 두 가지 상태 디자인

레이어에 대해 두 가지 다른 상태를 만듭니다. 아래 코드를 사용하여 작은 버튼을 기본 버튼 위로 이동하고 아이콘을 45° 회전합니다.

 button_1.states.a = y: 427 x: 246 width: 64 height: 64 button_2.states.a = y: 330 x: 246 width: 64 height: 64 icon.states.a = rotation: 45

3단계: 이벤트 추가

이 프로토타입을 애니메이션으로 만들려면 이벤트를 추가해야 합니다. 작업 버튼을 탭한 후 모든 레이어의 상태를 변경합니다.

 button.onTap -> button_1.stateCycle() button_2.stateCycle() icon.stateCycle()

4단계: 봄 애니메이션

기본 및 스프링 애니메이션 곡선의 차이점

이 시점에서 애니메이션은 매우 기계적으로 보입니다. 사람의 손길을 더하기 위해 모든 레이어에 스프링 애니메이션을 추가합니다.

 button_1.animationOptions = curve: Spring(tension: 170, friction: 12) button_2.animationOptions = delay: 0.05 curve: Spring(tension: 170, friction: 12) icon.animationOptions = curve: Spring(tension: 250, friction: 5)

작업 버튼을 사용할 준비가 되었습니다!

영상

2. 인터랙티브 스위치

아래 단계를 통해 고유한 스위치 상호 작용을 만들 수 있습니다. 여기에서 작업 프로토타입을 다운로드하십시오: https://framer.cloud/ieypV

iPhone 7 프로토타입에서 상호 작용 전환

1단계: 스위치 플레이그라운드 설계

Framer의 스위치 디자인

최소한 두 개의 레이어(배경과 점)를 포함하는 스위치 자체와 스위치를 사용한 후 애니메이션할 레이어의 두 가지만 있으면 됩니다.

2단계: 상태 만들기

첫 번째 기사에서 Framer Studio에서 직접 상태를 디자인하는 방법을 기억하십니까? 원하는 대로 상태를 디자인하거나 내 설정을 사용하세요.

 dot.states.a = x: 50 backgroundColor: "rgba(5,106,161,1)" switch_bg.states.a = backgroundColor: "rgba(0,136,205,1)" icon.states.a = opacity: 0 circle.states.a = x: 37 y: 183 width: 301 height: 301 circle_1.states.a = x: 20 y: 166 width: 337 height: 337

3단계: 이벤트 추가

프로토타입이 작동하도록 하려면 스위치에 이벤트를 추가해야 합니다. 스위치를 탭한 후 모든 레이어의 상태를 변경합니다.

 switch_1.onTap (event, layer) -> dot.stateCycle() switch_bg.stateCycle() circle.stateCycle() circle_1.stateCycle() icon.stateCycle()

4단계: 타이밍 조정

모든 것을 더 자연스럽게 만들려면 모든 상태의 시간과 지연을 조정하십시오.

 dot.animationOptions = time: 0.2 switch_bg.animationOptions = time: 0.2 circle_1.animationOptions = time: 0.5 curve: Spring circle.animationOptions = time: 0.5 delay: 0.05 curve: Spring icon.animationOptions = time: 0.5 curve: Spring

이제 프로토타입이 완성되었습니다!

3. 목록 항목 스와이프 동작

이것은 목록에서 항목을 제거, 보관 또는 저장하기 위한 일반적인 상호 작용입니다. 왼쪽이나 오른쪽으로 스와이프하면 항목이 지워집니다. 여기에서 프로토타입을 다운로드하십시오: https://framer.cloud/rzMWP

iPhone 7 모형에서 항목 상호 작용 제거

1단계: 디자인 모드에서 프로토타입 만들기

Framer에서 항목 상호 작용 디자인 제거

원하는 경우 자신의 디자인을 사용할 수 있습니다. 동일한 레이어 구조를 유지하기만 하면 됩니다. 위의 이미지에서 볼 수 있듯이 모든 목록 항목 아래에는 "실행 취소" 버튼이 있습니다.

2단계: 항목을 드래그 가능하게 만들기

간단하게 유지하기 위해 첫 번째 목록 항목에 대해서만 상호 작용을 만듭니다. 먼저 목록 항목을 드래그 가능하게 만듭니다. item.draggable = true .

그런 다음 세로 축을 잠급니다. item.draggable.vertical = false .

드래그 가능한 영역의 제약 조건 설정: item.draggable.constraints

마지막으로 크기를 항목 size: size: item 으로 설정합니다.

전체 코드는 다음과 같습니다.

 item.draggable = true item.draggable.vertical = false item.draggable.constraints = size: item

이제 왼쪽과 오른쪽으로 스와이프하면 항목이 항상 원래 위치로 돌아갑니다.

3단계: 상태 생성

다음으로 목록 항목이 제거될 때 상태를 만듭니다. 나는 단순히 x축을 사용하여 화면 밖으로 옮겼습니다.

 item.states.a = x: -360

4단계: 스와이프 후 상태 변경

마지막으로 상호 작용을 시작하기 위한 트리거를 생성해야 합니다. 항목을 화면 왼쪽으로 끌면 제거되어야 합니다. 코드는 다음과 같습니다.

 item.onMove -> if item.x < -70 item.stateCycle("a")

이 경우 "if" 문을 사용합니다. 위의 코드는 기본적으로 아이템 레이어를 70px 이상 이동할 때 아이템 상태를 'a' 상태로 변경한다고 말합니다. Framer Studio 설명서에서 if 문에 대해 읽을 수 있습니다. https://framer.com/getstarted/programming/#conditional

5단계: 탭한 후 작업 실행 취소

이 상호 작용이 거의 완료되었습니다. 남은 것은 이 작업을 실행 취소하는 것뿐입니다.

 item_bg.onTap -> item.stateCycle("default")

이전 튜토리얼의 이 코드에 익숙해야 합니다.

6단계(선택 사항): 애니메이션 타이밍 조정

원하는 경우 애니메이션의 타이밍을 조정할 수 있습니다.

 item.animationOptions = time: 0.75 curve: Spring

4. 버튼 로더

이는 사용자의 로딩 또는 대기 시간이 필요한 작업에 매우 유용한 상호 작용입니다. 이 상호 작용을 만들 때 하나씩 발생하는 많은 애니메이션을 관리하는 방법을 배우게 됩니다. 여기에서 프로토타입을 다운로드하십시오: https://framer.cloud/FxmHN

영상

1단계: 디자인 모드에서 프로토타입 만들기

4개의 하위 레이어(진행률 표시줄 및 다른 상태에 대한 3개의 아이콘)가 있는 간단한 버튼을 만듭니다. 업로드 아이콘이 표시되는 버튼, 너비가 0인 하단의 진행률 표시줄, 숨겨진 아이콘 두 개를 추가로 디자인했습니다.

Framer의 버튼 디자인

2단계: 이벤트 추가

이 전체 프로토타입은 Framer의 자동 코드 기능을 사용하여 코드를 한 줄도 작성하지 않고 만들 수 있습니다.

먼저 이벤트를 추가합니다. 버튼 레이어를 탭하여 전체 상호 작용을 트리거합니다.

영상

이것은 Framer가 당신을 위해 작성한 코드입니다:

 button.onTap (event, layer) ->

3단계: 애니메이션 디자인

Framer의 자동 코드 기능을 사용하여 모든 애니메이션을 디자인합니다.

Framer의 자동 코드 기능으로 애니메이션 디자인하기

저는 타이밍이 다른 4개의 애니메이션을 디자인했습니다.

  • 첫 번째 애니메이션은 진행률 표시줄의 너비를 변경하는 것입니다.
  • 두 번째는 업로드 아이콘을 불투명하게 숨기는 것입니다.
  • 세 번째는 로더 아이콘을 회전하고 표시하는 것입니다.
  • 마지막은 확인 아이콘을 표시하고 크기를 조정하는 것입니다.

Framer가 각 애니메이션에 대해 작성한 코드는 다음과 같습니다.

 # change progress bar width progress.animate width: 247 options: time: 1.4 curve: Bezier.ease # hide upload icon upload.animate opacity: 0.00 y: 39 options: time: 0.2 curve: Bezier.ease # show and rotate loader icon load.animate opacity: 1.00 rotation: 360 options: time: 1 curve: Bezier.ease # show and scale check icon done.animate opacity: 1.00 scale: 1.4 options: time: 0.2 curve: Bezier.ease delay: 1.00

4단계: 로딩 애니메이션 재설정

눈치채셨겠지만 애니메이션이 끝난 후 로더 아이콘을 숨기지 않았습니다. 이 프로토타입을 완료하려면 이 이벤트를 사용하여 다른 애니메이션을 트리거하십시오. load.onAnimationEnd ->

 load.animate opacity: 0.00 options: time: 0.2 curve: Bezier.ease

5. 당겨서 새로 고침

내부에 목록이 있는 거의 모든 단일 제품은 이러한 유형의 상호 작용을 사용합니다. 사용자는 전체 목록을 풀다운하여 새로 고칩니다. 만들기는 매우 쉽습니다. 여기에서 프로토타입을 다운로드하십시오: https://framer.cloud/DgMDw

iPhone 7 목업의 당겨서 새로 고침 프로토타입

1단계: 새로 고침 아이콘이 있는 간단한 목록 디자인

디자인 모드로 바로 이동할 수 있습니다. 목록과 새로 고침 아이콘의 두 가지가 필요합니다. 여기서 중요한 것은 새로 고침 아이콘을 불투명하게 숨기고 목록에 넣는 것입니다.

Framer의 당겨서 새로 고침 프로토타입 디자인

2단계: 스크롤 구성 요소 만들기

우리는 목록을 스크롤 가능하게 만들고 싶습니다. 이렇게 하려면 스크롤 구성 요소를 사용하고 여기에 목록 레이어를 추가합니다.

 scroll = new ScrollComponent size: Screen scrollHorizontal: false list.parent = scroll.content

3단계: 새로 고침 아이콘을 표시하도록 설정

아이콘에 대한 간단한 상태를 만듭니다.

 icon.states.a = opacity: 1

4단계: 풀다운 후 이벤트 추가

현재 목록을 스크롤할 수 있습니다. 즉, 위 또는 아래로 스크롤할 때 전체 스크롤 내용이 'y'축에서 이동합니다. 이 지식을 바탕으로 이벤트를 만들 수 있습니다.

 scroll.content.onMove -> if scroll.content.y > 180 icon.stateCycle("a")

다시 우리는 "if" 문을 사용하고 있습니다. 목록이 180px 이상 아래로 당겨지면(y축에서 이동) 작업이 트리거됩니다. 이 경우 목록과 새로 고침 아이콘의 두 레이어에 애니메이션을 적용합니다.

 scroll.content.onMove -> if scroll.content.y > 180 icon.stateCycle("a") list.animate y: 210 options: time: 1 curve: Bezier.ease refresh.animate rotation: 360 options: time: 1

"animate"를 사용하여 목록을 210px 아래로 이동하고 새로 고침 아이콘을 360° 회전합니다.

5단계: 모든 상태 재설정

프로토타입은 거의 작동하지만 애니메이션 새로 고침 후에 모든 레이어를 재설정해야 합니다. 이를 위해 애니메이션이 끝난 후 이벤트를 사용합니다.

 icon.onAnimationEnd ->

새로 고침 아이콘의 회전을 원래 위치로 다시 애니메이션화하고 상태 주기를 사용하여 목록 및 아이콘 배경 상태를 재설정합니다.

 scroll.content.onMove -> if scroll.content.y > 180 icon.stateCycle("a") list.animate y: 210 options: time: 1 curve: Bezier.ease refresh.animate rotation: 360 options: time: 1 icon.onAnimationEnd -> refresh.animate rotation: 0 list.stateCycle("default") icon.stateCycle("default")

그게 다야!

6. 드래그 인터랙션

앱 내에서 항목을 드래그하는 동안 항상 항목 자체에 문제가 발생한다는 사실을 알아차린 적이 있습니까? 때로는 항목이 줄어들거나 다른 항목이 흐려지거나 불투명도가 변경될 수 있습니다. 이러한 종류의 상호 작용을 만드는 방법을 알아보겠습니다. 여기에서 작업 프로토타입을 다운로드하십시오: https://framer.cloud/YstiW

Framer에서 인터랙션 디자인 드래그

1단계: 타일이 있는 간단한 그리드 디자인

타일 ​​그리드를 만들고 상위 요소 내부에 있는지 확인합니다.

Framer에서 프로토타입 디자인 드래그

2단계: "for" 루프를 사용하여 모든 타일을 대상으로 지정

" for 루프"는 무섭게 들릴지 모르지만 실제로는 간단합니다. for 루프에 익숙하지 않다면 먼저 약간의 배경 지식을 읽을 수 있습니다: https://framer.com/getstarted/programming/#loops-and-arrays

for 루프를 사용하여 그리드 내부의 모든 타일을 대상으로 지정합니다.

 for item in grid.subLayers

이 간단한 코드 줄을 사용하여 그리드 레이어 내부의 모든 레이어를 대상으로 했습니다.

3단계: 타일을 드래그 가능하게 만들기

그리드 안의 각 항목을 드래그 가능하게 만드세요.

 for item in grid.subLayers item.draggable = true

4단계: 드래그 상태 디자인

모든 항목은 드래그되는 동안 상태를 가져야 합니다. 코드에서 시작해야 하지만 나중에 레이어 편집기에서 이 상태를 편집할 수 있습니다.

 for item in grid.subLayers item.draggable = true item.states.a = scale: 1.1 shadowBlur: 50 shadowColor: 'rgba(0,0,0,0.5)'

5단계: 이벤트 드래그

항목이 드래그되는 동안 다른 상태를 트리거하는 이벤트를 만들어야 합니다. 드래그를 시작하는 동안 첫 번째 이벤트가 작업을 트리거합니다.

 for item in grid.subLayers item.draggable = true item.states.a = scale: 1.1 shadowBlur: 50 shadowColor: 'rgba(0,0,0,0.5)' item.onDragStart -> this.bringToFront() this.stateCycle("a")

항목이 항상 다른 레이어 위에 있는지 확인하기 위해 this.bringToFront() 를 사용했습니다.

두 번째 트리거는 항목의 상태를 재설정합니다.

 for item in grid.subLayers item.draggable = true item.states.a = scale: 1.1 shadowBlur: 50 shadowColor: 'rgba(0,0,0,0.5)' item.onDragStart -> this.bringToFront() this.stateCycle("a") item.onDragEnd -> this.sendToBack() this.stateCycle("default")

이 시점에서 작동하는 프로토타입이 있습니다.

6단계(선택 사항): 타이밍으로 재생

상호 작용은 항상 타임라인을 따라 발생합니다. 완벽한 효과를 얻으려면 타임라인을 조정하는 것이 좋습니다.

 for item in grid.subLayers item.draggable = true item.states.a = scale: 1.1 shadowBlur: 50 shadowColor: 'rgba(0,0,0,0.5)' item.onDragStart -> this.bringToFront() this.stateCycle("a") item.onDragEnd -> this.sendToBack() this.stateCycle("default") item.animationOptions = time: 0.3 curve: Spring

7. 여러 개의 "좋아요" 버튼(고급)

이 프로토타입에서는 보다 고급 기술을 사용하여 Framer Studio에서 레이어를 대상으로 지정하는 다른 방법을 보여줍니다. 이 방법은 더 짧은 시간에 더 반응이 빠른 상호 작용을 구축합니다. 기본 코딩에 익숙하지 않은 경우 먼저 이 기사를 읽는 것이 좋습니다. https://blog.framer.com/code-less-achieve-more-with-arrays-in-framer-c43594d13d59

이 상호 작용을 위해 디자인 부분을 건너뛰고 이 기사를 위해 특별히 만든 프로토타입을 사용합니다: https://framer.cloud/SZMCH

iPhone 7 모형에서 상호 작용을 좋아함

1단계: 어레이 생성

Framer Studio 내부의 레이어 구조를 살펴보십시오.

Framer의 인터랙션 디자인을 좋아함

"목록" 그룹의 "행" 안에 "버튼"이 있습니다. 버튼 레이어에 대한 상호 작용을 만들 것이므로 대상을 지정해야 합니다. 하지만 먼저 모든 행 레이어를 찾아 배열 안에 넣어야 합니다.

 rows = list.children buttons = []

또한 모든 "버튼" 레이어에 대해 빈 배열을 만들었습니다: buttons = [] .

2단계: 배열에 하위 계층 추가

"for 루프"부터 시작하겠습니다.

 for i in rows buttons.push(i.children[0])

배열에 레이어를 추가하려면 다음을 사용합니다. buttons.push() . 이것은 배열 내부에 각 "행" 그룹의 첫 번째 레이어를 배치한다는 것을 의미합니다.

3단계: 상태 및 이벤트 생성

이제 "좋아요" 버튼에 대한 상태를 만들고 탭하는 동안 이벤트를 추가합니다.

 for i in buttons i.states.a = scale: 1.2 hueRotate: -80 i.onTap -> this.stateCycle() i.animationOptions = time: 0.3 curve: Spring

이 기술을 사용하여 이전의 모든 프로토타입을 다시 만들고 더 복잡하게 만들 수 있습니다.

최종 메모

마이크로 인터랙션을 만들 때 가장 작은 세부 사항에 중점을 둡니다. 모든 유형의 동작에 의해 트리거되는 애니메이션을 만들고 완벽하게 만들 수 있습니다. 동일한 프로토타입을 만드는 방법은 수백 가지가 있으며 자신의 기술과 제품 디자인의 요구 사항에 맞는 방법을 사용해야 합니다.

• • •

Toptal Design 블로그에 대한 추가 정보:

  • 전자 상거래 UX – 모범 사례 개요(인포그래픽 포함)
  • 제품 디자인에서 인간 중심 디자인의 중요성
  • 최고의 UX 디자이너 포트폴리오 – 영감을 주는 사례 연구 및 사례
  • 모바일 인터페이스에 대한 경험적 원리
  • 예측적 디자인: 마법 같은 사용자 경험을 만드는 방법