Home

Awesome

<a href="https://exyte.com/"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/exyte/media/master/common/header-dark.png"><img src="https://raw.githubusercontent.com/exyte/media/master/common/header-light.png"></picture></a>

<a href="https://exyte.com/"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/exyte/media/master/common/our-site-dark.png" width="80" height="16"><img src="https://raw.githubusercontent.com/exyte/media/master/common/our-site-light.png" width="80" height="16"></picture></a>     <a href="https://twitter.com/exyteHQ"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/exyte/media/master/common/twitter-dark.png" width="74" height="16"><img src="https://raw.githubusercontent.com/exyte/media/master/common/twitter-light.png" width="74" height="16"> </picture></a> <a href="https://exyte.com/contacts"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/exyte/media/master/common/get-in-touch-dark.png" width="128" height="24" align="right"><img src="https://raw.githubusercontent.com/exyte/media/master/common/get-in-touch-light.png" width="128" height="24" align="right"></picture></a>

<img align="right" src="https://raw.githubusercontent.com/exyte/media/master/ConcentricOnboarding/demo.gif" width="250" /> <p><h1 align="left">Concentric Onboarding</h1></p> <p><h4>iOS library for a walkthrough or onboarding flow with tap actions written with SwiftUI</h4></p>

SPM Compatible Cocoapods Compatible Carthage Compatible License: MIT

Usage

  1. Create View's descendant class for your pages.
  2. Create at least two pages and fill them with content.
  3. Create an array of tuple - (page, background color).
  4. Create ConcentricOnboardingView and place it in your view hierarchy.
struct ContentView: View {
    var body: some View {
        return ConcentricOnboardingView(pageContents: [<your_page>, <your_background_color>])
    }
}
  1. Pass duration as an argument if you want animation to be faster/slower
ConcentricOnboardingView(pageContents: [<your_page>, <your_background_color>])
	.(duration: 2.0)
  1. Pass icon name as an argument if you want to change default icon on the button
ConcentricOnboardingView(pageContents: [<your_page>, <your_background_color>])
	.(nextIcon: "chevron.forward")

Public interface

goToNextPage(animated: Bool = true) - call this method manually if you need to
goToPreviousPage(animated: Bool = true) - call this method manually if you need to

Assignable closures

.animationWillBegin - called before animation starts
.animationDidEnd - called after animation ends
.didGoToLastPage - called after animation leading to last page ends
.didChangeCurrentPage - called after page changes
.insteadOfCyclingToFirstPage - replaces default navigation to first page after pressing next on last page
.insteadOfCyclingToLastPage - replaces default navigation to last page after pressing prev on first page while navigating backwards
.didPressNextButton - replaces default button action with user's custom closure

Examples

To try ConcentricOnboarding examples:

Installation

Swift Package Manager

dependencies: [
    .package(url: "https://github.com/exyte/ConcentricOnboarding.git")
]

CocoaPods

To install ConcentricOnboarding, simply add the following line to your Podfile:

pod 'ConcentricOnboarding'

Carthage

To integrate ConcentricOnboarding into your Xcode project using Carthage, specify it in your Cartfile

github "Exyte/ConcentricOnboarding"

Requirements

Acknowledgements

Many thanks to Cuberto team for the design idea and inspiration.

Our other open source SwiftUI libraries

PopupView - Toasts and popups library
Grid - The most powerful Grid container
ScalingHeaderScrollView - A scroll view with a sticky header which shrinks as you scroll
AnimatedTabBar - A tabbar with a number of preset animations
MediaPicker - Customizable media picker
Chat - Chat UI framework with fully customizable message cells, input view, and a built-in media picker
OpenAI Wrapper lib for OpenAI REST API
AnimatedGradient - Animated linear gradient
FloatingButton - Floating button menu
ActivityIndicatorView - A number of animated loading indicators
ProgressIndicatorView - A number of animated progress indicators
FlagAndCountryCode - Phone codes and flags for every country
SVGView - SVG parser
LiquidSwipe - Liquid navigation animation