Skip to content

Instantly share code, notes, and snippets.

@kangaroo5383
Created November 13, 2014 22:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kangaroo5383/c5587e37a777fed105a5 to your computer and use it in GitHub Desktop.
Save kangaroo5383/c5587e37a777fed105a5 to your computer and use it in GitHub Desktop.
onboarding design question
I would be interested in the group's opinion on a design challenge we are having with an interactive onboarding experience.
Desired feature:
When a user is experiencing specific screens for the first time, the on boarding messaging would help guide them through it if they are inactive for n seconds (inferring that they may be confused). An example would be - we have a trip creation screen with multiple steps, the onboarding message would come up, then the user could dismiss it or if a user perform the suggested action, the onboarding message would go to the next suggestion or disappear until some other screen comes up. It should also be smart enough to not get in the way of user doing whatever they want in the app at the time.
Possible solutions:
A. onboarding as a custom view, whenever a controller decides it needs some hints, it would send the proper information and show and dismiss it.
- pros: dumb and simple onboarding view
- cons: I don't think it's right that view controllers have to manage onboarding logic since conceptually onboarding is something that lives on top of actual functionalities of the app so it shouldn't be intermingled with VC logic
B. onboarding as a singleton managing certain onboarding logic such as managing next tips, showing and hiding visual elements relating to onboarding. VC that wants onboarding should implement proper protocols for onboarding to operate.
This seems more reasonable to me, but being a delegate of a singleton seems like rather strange idea.
- pros: clear separation of responsibilities
- cons: it feels weird?
Any discussion on the above ideas, or new ones would be much welcome. Thank you for your help! (Also our app is not built with FB frameworks or anything, just good ole UIKit )
@kangaroo5383
Copy link
Author

Maybe something like this:

UIWindow subclass - LBOnboardingWindow
methods on onboarding window ( [LBOnboardingWindow mainWindow] )

  • addSource:withActions:
  • removeSource:
  • resolveAction:forSource:
  • skipAction:forSource:
  • setNeedUpdateAction:forSource: //scrolling or changes in state, signaling to the window it should update when it's ready

protocol
onboardingWindow:positionForAction:
onboardingWindow:actionIsValid:

But having a delegate for a window seems strange. Alternatively the onboarding window could send out different types of notifications for different ready state? Any help much appreciated.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment