Prototyper en interaktiv iOS-produkttur med Framer.js

Framer.js og tilhørende økosystem Framer Studio er gode verktøy for å komponere, presentere og iterere på interaksjonsdesign. I dette innlegget går jeg gjennom konstruksjon av en interaktiv prototype for en fiktiv iOS Apps produkttur med Adobe Photoshop CC 2014 og Framer Studio 1.9.29. Vi antar at vi lager en nyhetsfeed-app, der oppdateringer fra brukerens nettverk vises i en tidslinje, mens innstillinger og tilleggsalternativer vises i en sidebjelke.

Spill med prototypen på demoversiden (webkitbaserte nettlesere - Chrome, Safari, etc - støttes).

1. Første oppsett

Opprett eiendeler i Photoshop

Først opprett dine eiendeler i Photoshop. Produktturen består av fire trinn:

  1. Introduksjon til App
  2. Introduksjon til nyhetsfeeden
  3. Introduksjon til sidefeltet
  4. Innloggingsskjerm

Når du arbeider med Framer, er det viktig å merke seg at bare grupperte, synlige Photoshop-lag blir importert til Framer Studio. Grupper lagene dine ved samhandling (dvs. ting som har samme samspill skal grupperes sammen), siden du får tilgang til ting etter gruppens navn når du jobber i Framer. For denne produktturen har jeg gruppert lagene mine etter deres funksjon:

Disse lagene vil være tilgjengelige i koden senere via myLayers.doneButtonmyLayers.dots, etc. 

Import til Framer Studio

Deretter importerer du dine eiendeler fra Photoshop til Framer Studio. Ditt Photoshop-dokument må være åpent og lagret når du foretar en import. Klikk på Importere knappen, og du vil se en dialog som ser noe ut som dette:

Framer vil flate gruppene dine til bilder ved import, og dine eiendeler vil være tilgjengelige i Framer etter at importen er fullført.

Bruk variabler til enkelt å manipulere senere

Det er best å endre dine importerte grupperte objekter i variabler når du har importert til Framer, da det vil gjøre det lettere for deg å manipulere prototypen senere hvis du trenger det. 

For eksempel kan du på en senere dato bruke en annen Photoshop-fil med forskjellige navngitte grupper, men med de samme samspillene du allerede har opprettet. Dette vil bli mye lettere hvis du strukturerer interaksjonene dine rundt variable navn, da du bare kan bytte variabelenes referanse på en linje og få den reflektert gjennom resten av dokumentet:

# Dette importerer alle lagene for "tur" til turLayers ly = Framer.Importer.load "importert / tur" ## ------------------- VARIABLES ---- ----------------- velkommen = ly.welcome dots = ly.dots moveDot = ly.movingDot ferdig = ly.doneButton login = ly.login logo = ly.logo news = ly .newsFeed siderbar = ly.siderbar gradient = ly.gradient background = ly.background feedDescription. ly.feedDescription

Nå som vi har noen eiendeler å jobbe med, kan du begynne å skape samspillet som vil bringe prototypen til livs. 

Bruk stater

Hvis du har eiendeler som vil ha forskjellige samspill i samlingen din, er stater en kraftig måte å strukturere koden på. I denne prototypen vil de fire trinnene i turen hver bruke forskjellige eiendeler på forskjellige måter. Stater vil tillate oss fleksibiliteten til å definere hvert stykke av sammensetningen uavhengig, og øke kodens modularitet og lesbarhet. 

For eksempel vil vår nyhetsmatingsskjerm ha fire stater: 

  1. Original (høyre side av skjermen, ikke synlig)
  2. Vist (midt på skjermen)
  3. Sidebjelke (langt til høyre på skjermen)
  4. Skjult (venstre side av skjermen, ikke synlig)

Våre stater vil reflektere disse stillingene ved å sette forskjellige x verdier basert på hvor nyhetsmate skal være i en gitt del av turen:

news.states.add opprinnelse: x: 750 vist: x: news.originX sidebar: x: 655 skjult: x; -750

2. Strukturinteraksjoner i Framer

Aktiver dra på lag

For produktturen, vil vi illustrere forskjellige områder av appen etter at en bruker har swiped igjen for å komme til neste del av produktturen. For å gjøre dette, må du først aktivere å trekke på lagene der du vil tillate det.

Lag en matrise:

dragLayers = [velkomst, gradient, gradient2]

Deretter oppretter du en til sløyfe for å iterere gjennom denne gruppen, og legger til trekkbare egenskaper til disse lagene:

for dra i dragLayers # Aktiver dra dra.draggable.enabled = true drag.draggable.speedY = 0 # Forhindre å dra venstre til høyre dra.draggable.maxDragFrame = drag.frame drag.draggable.maxDragFrame.width * = 2 drag.draggable. maxDragFrame.x = drag.x-drag.width
  • aktivert = sant lar laget bli trukket
  • speedY = 0 deaktiverer å dra langs Y-aksen
  • maxDragFrame = drag.frame setter rammen der en kan dra for å ligge innenfor laget selv
  • maxDragFrame.x = drag.x-drag.width lar rammen bli trukket langs x-aksen negativt (dvs. høyre til venstre)

Endre stater når du drar utover et visst punkt

Etter at du har slått på lagene du ønsker, må du målrette lagene og endre statusene dine når de trekkes i en viss grad.

welcome.on Events.DragEnd, -> hvis welcome.screenFrame.x < -150

Når brukeren er ferdig med å dra Velkommen lag, hvis de har trukket den utover 150 piksler til venstre (screenFrame.x < -150), endrer deretter prototypens tilstander til nyhetsmatstatusen:

welcome.on EventsDragEnd, -> hvis velkommen.screenframe.x < -150 welcome.states.switch "hidden" news.states.switch "shown" moveDot.states.switch "second" gradient.states.switch "shown"

Statene til andre elementer må endres tilsvarende (skjul velkomsttilstanden, flytt prikken nederst for å gjenspeile trinn 2 i turen, etc.). Deretter gjentar vi for de andre trekkbare lagene (gradient, gradient2) og endrer tilstandene tilsvarende. Fortsatt på denne måten kan vi skape en fullverdig prototype for vår produkttur. 

Animer lag i et array individuelt, og legg til en liten forsinkelse

Ved å animere de enkelte statusoppdateringene i nyhetsflaten i stedet for hele gruppen, får prototypen en slankere følelse, som vist i det (veldig små) animerte gifet nedenfor:

Først opprett en rekke lagene du vil animere:

newsLayers = [ly.celeb1, ly.celeb2, ly.celeb3, ly.celeb4, ly.celeb5, ly.celeb6]

Deretter oppretter du en funksjon for å animere hvert lag til ønsket x plassering, legger til en forsinkelse på 0.1 mellom hver animasjon:

newsCurve = 'våren (50, 30, 30)' newsAnimation = -> for jeg i [0 ... newsLayers.length-1] newsLayers [i] .animate delay: i * 0,1 egenskaper: x: 0 kurve: newsCurve

Pro Tips: Lag funksjoner for dine interaksjoner

Hvis du skal bruke visse samspill på forskjellige steder i hele prototypen, bør du vurdere å skape funksjoner slik at du kan bruke dem senere. Så i stedet for å skrive animasjonen flere ganger, skriv den en gang og bruk den om nødvendig. Lag en animasjon som kan brukes på nytt ved hjelp av en metode som:

Layer :: fadeOut = -> this.animate egenskaper: opacity: 0 kurve: 'easy-in-out' tid: 0.5

Deretter kan du "fadeOut" noe lag ved å ringe: myLayer.fadeOut () 

Konklusjon

Framer er et godt verktøy for å lage moderne, silkeaktig, høyt interaktive prototyper raskt. Inkluderer den i arbeidsflyten din - oppretter layoutene dine i Photoshop (eller Sketch), og deretter manipulerer via Framer - lar deg lage raske prototyper mye raskere. 

Du vil også kunne endre designene dine i ditt visuelle layoutverktøy og deretter importere direkte til Framer, slik at det blir mer effektiv iterasjon ettersom utviklingen utvikler seg. Hvis du har satt opp dokumentet ditt riktig med variabler, vil samhandlingene dine gjelde for de nylig importerte eiendelene, noe som muliggjør rask iterering ved samhandling og visuelle designideer. Hvis du skulle levere statisk interaksjonsdesign, må du oppdatere flere statiske komposisjoner med nye visuelle elementer. Ved å bruke denne arbeidsflyten, gjør du bare en endring i et enkeltstående dokument, reimport til Framer og Voila!

Hold deg oppdatert for flere opplæringsprogrammer på prototyping. Du er også velkommen til å kommentere under, og jeg kommer tilbake til deg så snart som mulig. Glad prototyping!