Skip to content

Commit

Permalink
sequence and retry options add
Browse files Browse the repository at this point in the history
  • Loading branch information
vv60 committed Apr 16, 2019
1 parent 383e805 commit 45960c0
Show file tree
Hide file tree
Showing 4 changed files with 92 additions and 65 deletions.
4 changes: 4 additions & 0 deletions MaterialShowcase.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
objects = {

/* Begin PBXBuildFile section */
356FF398226634C2000AD80C /* MaterialShowcaseSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 356FF397226634C2000AD80C /* MaterialShowcaseSequence.swift */; };
6C5A3CF72265F26400D7D669 /* MaterialShowcaseTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C5A3CF62265F26400D7D669 /* MaterialShowcaseTests.swift */; };
6C5A3CF92265F26400D7D669 /* MaterialShowcase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE083A191EBACFEB0077666F /* MaterialShowcase.framework */; };
7533A2011FBDE68C00F72AD2 /* MaterialShowcaseInstructionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7533A2001FBDE68C00F72AD2 /* MaterialShowcaseInstructionView.swift */; };
Expand All @@ -28,6 +29,7 @@
/* End PBXContainerItemProxy section */

/* Begin PBXFileReference section */
356FF397226634C2000AD80C /* MaterialShowcaseSequence.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MaterialShowcaseSequence.swift; sourceTree = "<group>"; };
6C5A3CF42265F26400D7D669 /* MaterialShowcaseTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MaterialShowcaseTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
6C5A3CF62265F26400D7D669 /* MaterialShowcaseTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MaterialShowcaseTests.swift; sourceTree = "<group>"; };
6C5A3CF82265F26400D7D669 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
Expand Down Expand Up @@ -97,6 +99,7 @@
754559381FB0FE1F0014A163 /* MaterialShowcaseController.swift */,
7533A2001FBDE68C00F72AD2 /* MaterialShowcaseInstructionView.swift */,
7533A2021FBDE9A100F72AD2 /* Utility.swift */,
356FF397226634C2000AD80C /* MaterialShowcaseSequence.swift */,
);
path = MaterialShowcase;
sourceTree = "<group>";
Expand Down Expand Up @@ -222,6 +225,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
356FF398226634C2000AD80C /* MaterialShowcaseSequence.swift in Sources */,
7533A2031FBDE9A100F72AD2 /* Utility.swift in Sources */,
754559391FB0FE1F0014A163 /* MaterialShowcaseController.swift in Sources */,
CE083A251EBAD0020077666F /* MaterialShowcase.swift in Sources */,
Expand Down
40 changes: 6 additions & 34 deletions MaterialShowcase/MaterialShowcase.swift
Original file line number Diff line number Diff line change
Expand Up @@ -89,15 +89,11 @@ public class MaterialShowcase: UIView {
// Delegate
@objc public weak var delegate: MaterialShowcaseDelegate?

// @objc private var isSequence : Bool = false
@objc public var sequenceArray : [MaterialShowcase]!



public init() {
// Create frame
let frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height)
self.sequenceArray = []
super.init(frame: frame)

configure()
Expand Down Expand Up @@ -158,9 +154,6 @@ extension MaterialShowcase {

/// Shows it over current screen after completing setup process
@objc public func show(animated: Bool = true, completion handler: (()-> Void)?) {
guard !getUserState() else {
return
}
initViews()
alpha = 0.0
containerView.addSubview(self)
Expand Down Expand Up @@ -188,30 +181,9 @@ extension MaterialShowcase {
handler()
}
}

@objc public func sequence(array: [MaterialShowcase]) {

MaterialShowcase.showCaseArray = array
array.first?.show(completion: nil)
}



/// Set user show retry
@objc public func setUserState(save : Bool , key : String? = nil) {
guard key != nil else {
return
}
UserDefaults.standard.set(save, forKey: key!)
}

/// Remove user state
@objc public func removeUserState(key : String = MaterialKey._default.rawValue) {
UserDefaults.standard.removeObject(forKey: key)
}
/// Remove user state
@objc public func getUserState(key : String = MaterialKey._default.rawValue) -> Bool {
return UserDefaults.standard.bool(forKey: key)
}

}

// MARK: - Utility API
Expand Down Expand Up @@ -532,10 +504,10 @@ extension MaterialShowcase {
delegate?.showCaseDidDismiss?(showcase: self, didTapTarget: didTapTarget)
}

if MaterialShowcase.showCaseArray.count > 0 {
continueSequence()
}

// if MaterialShowcase.showCaseArray.count > 0 {
// continueSequence()
// }
//
}
func continueSequence() {

Expand Down
63 changes: 63 additions & 0 deletions MaterialShowcase/MaterialShowcaseSequence.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
//
// MaterialShowCaseSequence.swift
// MaterialShowcase
//
// Created by VB on 16.04.2019.
// Copyright © 2019 Aromajoin. All rights reserved.
//

import Foundation

public class MaterialShowcaseSequence {

var showcaseArray : [MaterialShowcase] = []
var currentCase : Int = 0
var key : String?

public func temp(_ showcase: MaterialShowcase) -> MaterialShowcaseSequence {
showcaseArray.append(showcase)
return self
}
public func start() {
guard getUserState(key: self.key) else {
return
}
showcaseArray.first?.show(completion: increase)
}
func increase() -> Void {
self.currentCase += 1
}

/// Set user show retry
public func setKey(key : String? = nil) -> MaterialShowcaseSequence {
guard key != nil else {
return self
}
self.key = key
return self
}

/// Remove user state
public func removeUserState(key : String = MaterialKey._default.rawValue) {
UserDefaults.standard.removeObject(forKey: key)
}
/// Remove user state
func getUserState(key : String?) -> Bool {
guard key != nil else {
return false
}
return UserDefaults.standard.bool(forKey: key!)
}
public init() { }

public func showCaseWillDismis() {
guard self.showcaseArray.count > currentCase else {
//last index
UserDefaults.standard.set(true, forKey: key!)
return
}
showcaseArray[currentCase].show(completion: self.increase)
}

}

50 changes: 19 additions & 31 deletions Sample/MaterialShowcaseSample/ViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ class ViewController: UIViewController {
@IBOutlet weak var button: UIButton!
@IBOutlet weak var tableView: UITableView!

var xas = MaterialShowcaseSequence()

// Mock data for table view
let animals = ["Dolphin", "Penguin", "Panda", "Neko", "Inu"]
override func viewDidLoad() {
Expand All @@ -32,8 +34,7 @@ class ViewController: UIViewController {
showcase3.primaryText = "Action 3"
showcase3.secondaryText = "Click here to go into details"
showcase3.isTapRecognizerForTargetView = false




let showcase1 = MaterialShowcase()
showcase1.setTargetView(view: button)
Expand All @@ -42,29 +43,32 @@ class ViewController: UIViewController {
showcase1.shouldSetTintColor = false // It should be set to false when button uses image.
showcase1.backgroundPromptColor = UIColor.blue
showcase1.isTapRecognizerForTargetView = true
showcase1.delegate = self




let showcase2 = MaterialShowcase()
showcase2.setTargetView(barButtonItem: searchItem)
showcase2.primaryText = "Action 1.1"
showcase2.secondaryText = "Click here to go into details"
showcase2.isTapRecognizerForTargetView = true
showcase2.delegate = self


showcase3.delegate = self
showcase2.delegate = self
showcase1.delegate = self

xas = xas.temp(showcase3).temp(showcase1).temp(showcase2)

xas.start()


// showcase3.show(completion: nil)



let arr = [showcase1,showcase3,showcase2]
let showcase = MaterialShowcase()
showcase.setUserState(save: true,key: "veli")
showcase.sequence(array: arr)
// let arr = [showcase1,showcase3,showcase2]
// let showcase = MaterialShowcase()
// showcase.setUserState(save: true,key: "veli")
// showcase.sequence(array: arr)

}
override func viewWillAppear(_ animated: Bool) {
Expand All @@ -78,7 +82,7 @@ class ViewController: UIViewController {
showcase.shouldSetTintColor = false // It should be set to false when button uses image.
showcase.backgroundPromptColor = UIColor.blue
showcase.isTapRecognizerForTargetView = true
showcase.delegate = self
// showcase.delegate = self
showcase.show(completion: {
print("==== completion Action 1 ====")
// You can save showcase state here
Expand Down Expand Up @@ -111,7 +115,7 @@ class ViewController: UIViewController {
showcase.secondaryTextSize = 14
showcase.isTapRecognizerForTargetView = true
// Delegate to handle other action after showcase is dismissed.
showcase.delegate = self
// showcase.delegate = self
showcase.show(completion: {
// You can save showcase state here
print("==== completion Action 2 ====")
Expand All @@ -127,7 +131,7 @@ class ViewController: UIViewController {
showcase.primaryText = "Action 3"
showcase.secondaryText = "Click here to go into details"
showcase.isTapRecognizerForTargetView = true
showcase.delegate = self
// showcase.delegate = self
showcase.show(completion: nil)
}

Expand All @@ -137,7 +141,7 @@ class ViewController: UIViewController {
showcase.primaryText = "Action 3"
showcase.secondaryText = "Click here to go into details"
showcase.isTapRecognizerForTargetView = false
showcase.delegate = self
// showcase.delegate = self
showcase.show(completion: nil)
}
@IBAction func showInSeries(_ sender: UIButton) {
Expand All @@ -162,23 +166,7 @@ extension ViewController: UITableViewDataSource {

// If you need handle other actions (i.e: show other showcase), you can implement MaterialShowcaseDelegate
extension ViewController: MaterialShowcaseDelegate {
func showCaseWillDismiss(showcase: MaterialShowcase, didTapTarget: Bool) {
print("Showcase \(showcase.primaryText) will dismiss.")
}
func showCaseDidDismiss(showcase: MaterialShowcase, didTapTarget: Bool) {
print("Showcase \(showcase.primaryText) dimissed.")
print("tutorialStep = \(tutorialStep)")
switch tutorialStep {
case 2:
self.showBarButtonItem(self)
case 3:
self.showTabBar(self)
case 4:
self.showTableView(self)
default:
tutorialStep = 0
}

tutorialStep += 1
xas.showCaseWillDismis()
}
}

0 comments on commit 45960c0

Please sign in to comment.