Skip to content

gmoral/OnboardingKit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OnboardingKit

OnboardingKit provides an onboarding flow that is simple and easy to implement.

myfile

Contents

Requirements

  • iOS 15.0 or later
  • Xcode 13.0 or later
  • Swift 5.0 or later

Installation

There are two ways to use OnboardingKit in your project:

  • using Swift Package Manager
  • manual install (build frameworks or embed Xcode Project)

Swift Package Manager

To integrate OnboardingKit into your Xcode project using Swift Package Manager, add it to the dependencies value of your Package.swift:

dependencies: [
    .package(url: "https://github.com/gmoral/OnboardingKit.git", .upToNextMajor(from: "1.0.0"))
]

Swift Package Manager is a tool for managing the distribution of Swift code. It’s integrated with the Swift build system to automate the process of downloading, compiling, and linking dependencies.

Manually

If you prefer not to use Swift Package Manager, you can integrate OnboardingKit into your project manually.


Usage

Quick Start

import UIKit
import OnboardingKit

class ViewController: UIViewController, OnboardingKitDelegate {
  
  private var onboardingKit: OnboardingKit?

  override func viewDidLoad() {
    super.viewDidLoad()
    DispatchQueue.main.async {
      self.onboardingKit = OnboardingKit(
        slides: [
          .init(image: UIImage(named: "imSlide1")!,
            title: "Curry Garden, 89 Rue de Bagnolet - Paris "),
          .init(image: UIImage(named: "imSlide2")!,
            title: "Moom Mam, 19 Rue de Mogador - Paris"),
          .init(image: UIImage(named: "imSlide3")!,
            title: "Les 3 Bornés, 71 Rue Jean-Pierre Timbaud - Paris"),
          .init(image: UIImage(named: "imSlide4")!,
            title: "Swadee, 20 Rue du Débarcadère - Paris"),
          .init(image: UIImage(named: "imSlide5")!,
            title: "Meating Corner, 8 Rue des Lombards - Paris")
        ],
        tintColor: UIColor(red: 220/255, green: 20/255, blue: 60/255, alpha: 1.0), themeFont: UIFont(name: "Kailasa Bold", size: 28) ?? .systemFont(ofSize: 28, weight: .bold))
      self.onboardingKit?.delegate = self
      self.onboardingKit?.launchOnboarding(rootVC: self)
    }
  }
  
  // MARK: - OnboardingKitDelegate {
  func nextButtonDidTap(atIndex index: Int) {
    print("next button is tapped at index: \(index)")
  }
  
  func getStartedButtonDidTap() {
    onboardingKit?.dismissOnboarding()
    onboardingKit = nil
    transit(viewController: MainViewController())
  }
  
  private func transit(viewController: UIViewController) {
    let foregroundScenes = UIApplication.shared.connectedScenes.filter({
      $0.activationState == .foregroundActive
    })
    
    let window = foregroundScenes
      .map({ $0 as? UIWindowScene })
      .compactMap({ $0 })
      .first?
      .windows
      .filter({ $0.isKeyWindow })
      .first
    
    guard let uWindow = window else { return }
    uWindow.rootViewController = viewController
    
    UIView.transition(
      with: uWindow,
      duration: 0.3,
      options: [.transitionCrossDissolve],
      animations: nil,
      completion: nil)
  }
}

class MainViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
        let label = UILabel()
        label.text = "Main View Controller"
        view.addSubview(label)
        label.snp.makeConstraints { make in
            make.center.equalTo(view)
        }
        view.backgroundColor = .white
    }
}

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages