Skip to content

Commit

Permalink
Merge pull request #28 from crexista/versions/0.1.0
Browse files Browse the repository at this point in the history
Versions/0.1.0
  • Loading branch information
crexista committed Jan 12, 2017
2 parents 8d0580c + e1825aa commit c76e3d1
Show file tree
Hide file tree
Showing 45 changed files with 1,672 additions and 697 deletions.
2 changes: 2 additions & 0 deletions Example/Example.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
201706C5FED9D83C6BAB85C3 /* Pods-Sample2.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Sample2.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Sample2/Pods-Sample2.debug.xcconfig"; sourceTree = "<group>"; };
21C615BF782FA815F1751852 /* Pods_Sample2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Sample2.framework; sourceTree = BUILT_PRODUCTS_DIR; };
3A6B9E290930010B7FCA4155 /* Pods-Sample1.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Sample1.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Sample1/Pods-Sample1.debug.xcconfig"; sourceTree = "<group>"; };
4E0941C11E23B19E00FBAF21 /* Sample2.playground */ = {isa = PBXFileReference; lastKnownFileType = file.playground; path = Sample2.playground; sourceTree = "<group>"; };
4E7084191DE6CAF40072F7EE /* Sample1AViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Sample1AViewController.swift; sourceTree = "<group>"; };
4E70841D1DE6CB1B0072F7EE /* Sample1BViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Sample1BViewController.swift; sourceTree = "<group>"; };
4E7084311DE6E3290072F7EE /* Sample1AViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = Sample1AViewController.xib; sourceTree = "<group>"; };
Expand Down Expand Up @@ -242,6 +243,7 @@
4EF5CD2D1DE30BFC00683D1E /* LaunchScreen.storyboard */,
4EF5CD301DE30BFC00683D1E /* Info.plist */,
4EFFC33D1DE4C5B7006B1587 /* Sample.playground */,
4E0941C11E23B19E00FBAF21 /* Sample2.playground */,
);
path = Sample1;
sourceTree = "<group>";
Expand Down
10 changes: 5 additions & 5 deletions Example/Sample1/AppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@ import KabuKit
class AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow?

var sceneSequence: SceneSequence<UIViewController>?
var producer: Producer?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
Expand All @@ -25,10 +24,11 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
self.window!.rootViewController?.view.backgroundColor = UIColor.brown
self.window!.backgroundColor = UIColor.white
self.window!.makeKeyAndVisible()
sceneSequence = SceneSequence(root)
let xibName = "Sample1AViewController"

root.navigationController?.setNavigationBarHidden(true, animated: true)
sceneSequence?.start(ViewControllerXIBFile(xibName, Bundle.main), Sample1AViewController.self, false, { (stage, scene) in

let scene = Sample1AViewController(nibName: "Sample1AViewController", bundle: Bundle.main)
producer = Producer.run(sequence: SceneSequence(root, scene, false) { (stage, scene) in
stage.addChildViewController(scene)
stage.view.addSubview(scene.view)
})
Expand Down
4 changes: 3 additions & 1 deletion Example/Sample1/Scenes/Sample1A/Sample1AAction.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import KabuKit
import RxSwift
import RxCocoa

/*
class Sample1AAction: Action {
unowned let label: UILabel
Expand All @@ -23,7 +24,7 @@ class Sample1AAction: Action {
typealias SceneType = Sample1AViewController
func start(director: SceneDirector<Sample1AViewController.Sample1Link>?, argument: Bool?) -> [Observable<()>] {
func start(director: SceneDirector<Sample1AViewController.Sample1Link>?, context: Bool?) -> [Observable<()>] {
return [
self.nextButtonA.rx.tap.do(onNext: { () in director?.changeScene(transition: Sample1AViewController.Sample1Link.A)}),
self.nextButtonB.rx.tap.do(onNext: { () in director?.changeScene(transition: Sample1AViewController.Sample1Link.B)}),
Expand All @@ -50,3 +51,4 @@ class Sample1AAction: Action {
self.prevButton = prevButton
}
}
*/
78 changes: 44 additions & 34 deletions Example/Sample1/Scenes/Sample1A/Sample1AScene.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,65 +9,75 @@
import Foundation
import KabuKit

extension Sample1AViewController: Scene {

extension Sample1AViewController: Scene, SceneLinkage {

// MARK: - SceneTransition Protocol
enum Sample1Link : SceneTransition {
enum Sample1Destination: Destination {
typealias StageType = UIViewController
case A, B

func request(context: SceneContext<UIViewController>) -> SceneRequest? {
switch self {
case .A:
let xib = ViewControllerXIBFile("Sample1AViewController", Bundle.main)
return context.sceneRequest(xib, Sample1AViewController.self, true) { (stage, scene) in
stage.navigationController?.pushViewController(scene, animated: true)
}
case .B:
let xib = ViewControllerXIBFile("Sample1BViewController", Bundle.main)
return context.sceneRequest(xib, Sample1BViewController.self, nil) { (stage, scene) in
stage.navigationController?.pushViewController(scene, animated: true)
}
}
}
case a
case b
}

// MARK: - ActionScene Protocol
typealias TransitionType = Sample1Link
typealias ArgumentType = Bool
typealias DestinationType = Sample1Destination

typealias ContextType = Bool

public var isRemovable: Bool {
return argument!
return true
}


func onRemove(stage: UIViewController) {
func guide(to destination: Sample1Destination) -> Transition<UIViewController>? {

switch destination {
case .a:
let scene = Sample1AViewController(nibName: "Sample1AViewController", bundle: Bundle.main)
return destination.specify(scene, false, { (stage, scene) in
stage.navigationController?.pushViewController(scene, animated: true)
})

case .b:
let scene = Sample1BViewController(nibName: "Sample1BViewController", bundle: Bundle.main)
return destination.specify(scene, nil, { (stage, scene) in
stage.navigationController?.pushViewController(scene, animated: true)
})

}
}

/**
Sceneが削除されるときに呼ばれます.
画面上から消すための処理をここに記述してください
*/
public func willRemove(from stage: UIViewController) {
_ = stage.navigationController?.popViewController(animated: true)
}


func onPressAButton(sender: UIButton) {
director?.changeScene(transition: Sample1Link.A)
director?.forwardTo(Sample1Destination.a)
}

func onPressBButton(sender: UIButton) {
director?.changeScene(transition: Sample1Link.B)
director?.forwardTo(Sample1Destination.b)
}

func onPressPrevButton(sender: UIButton) {
director?.exitScene()
director?.back()
}

// MARK: - Override
override func viewDidLoad() {
prevButton.isEnabled = argument!
prevButton.isEnabled = context!
nextButtonA.addTarget(self, action: #selector(onPressAButton(sender:)), for: .touchUpInside)
nextButtonB.addTarget(self, action: #selector(onPressBButton(sender:)), for: .touchUpInside)
prevButton.addTarget(self, action: #selector(onPressPrevButton(sender:)), for: .touchUpInside)
}

override func viewDidDisappear(_ animated: Bool) {
if (self.navigationController == nil && !isReleased) {
director?.exitScene()
if (self.navigationController == nil && !isRemovable) {
director?.back()
}
}

}
28 changes: 13 additions & 15 deletions Example/Sample1/Scenes/Sample1B/Sample1BAction.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,9 @@ import RxSwift
import RxCocoa

class Sample1BAction: Action {

typealias SceneType = Sample1BViewController

typealias SceneType = Sample1AViewController
// typealias DestinationType = Sample1BViewController.Sample2Destination

unowned let label: UILabel

Expand All @@ -22,31 +23,28 @@ class Sample1BAction: Action {
unowned let nextButtonB: UIButton

unowned let prevButton: UIButton
func start(director: SceneDirector<Sample1BViewController.Sample1BLink>?, argument: ()?) -> [Observable<()>] {

public func invoke(director: Director<Sample1BViewController.Sample2Destination>) -> [SubscribeTarget] {
return [
self.nextButtonA.rx.tap.do(onNext: { () in director?.changeScene(transition: Sample1BViewController.Sample1BLink.A)}),
self.nextButtonB.rx.tap.do(onNext: { () in director?.changeScene(transition: Sample1BViewController.Sample1BLink.B)}),
self.prevButton.rx.tap.do(onNext: { () in _ = director?.exitScene()})
self.nextButtonA.rx.tap.do(onNext: { () in director.forwardTo(Sample1BViewController.Sample2Destination.a)}).toTarget,
self.nextButtonB.rx.tap.do(onNext: { () in director.forwardTo(Sample1BViewController.Sample2Destination.b)}).toTarget,
self.prevButton.rx.tap.do(onNext: { () in director.back()}).toTarget
]
}

func onStop() {
print("onStop")
public func onError(error: Error, label: String?) -> RecoverPattern {
return RecoverPattern.doNothing
}

func onError(error: Error) {
}

deinit {
print("action deinit")
public func onStop() {

}


init(label: UILabel, buttonA: UIButton, buttonB: UIButton, prevButton: UIButton) {
self.label = label
self.nextButtonA = buttonA
self.nextButtonB = buttonB
self.prevButton = prevButton
}
}

54 changes: 31 additions & 23 deletions Example/Sample1/Scenes/Sample1B/Sample1BScene.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,52 +9,60 @@
import Foundation
import KabuKit

extension Sample1BViewController : ActionScene {

extension Sample1BViewController : ActionScene, SceneLinkage {

enum Sample2Destination: Destination {
typealias StageType = UIViewController
case a
case b
}

typealias DestinationType = Sample2Destination

typealias TransitionType = Sample1BLink
typealias ArgumentType = Void
typealias ContextType = Void

enum Sample1BLink : SceneTransition {
typealias StageType = UIViewController
case A
case B
func guide(to destination: Sample2Destination) -> Transition<UIViewController>? {

func request(context: SceneContext<UIViewController>) -> SceneRequest? {
switch self {
case .A:
let xib = ViewControllerXIBFile("Sample1AViewController", Bundle.main)
return context.sceneRequest(xib, Sample1AViewController.self, true) { (stage, scene) in
stage.navigationController?.pushViewController(scene, animated: true)
}
case .B:
let xib = ViewControllerXIBFile("Sample1BViewController", Bundle.main)
return context.sceneRequest(xib, Sample1BViewController.self, nil) { (stage, scene) in
stage.navigationController?.pushViewController(scene, animated: true)
}
switch destination {
case .a:
let newScene = Sample1AViewController(nibName: "Sample1AViewController", bundle: Bundle.main)

return destination.specify(newScene, false) { (stage, scene) in
stage.navigationController?.pushViewController(scene, animated: true)
}

case .b:
let newScene = Sample1BViewController(nibName: "Sample1BViewController", bundle: Bundle.main)

return destination.specify(newScene, nil) { (stage, scene) in
stage.navigationController?.pushViewController(scene, animated: true)
}

}
}

var isRemovable: Bool {
return true
}

func onRemove(stage: UIViewController) {
func willRemove(from stage: UIViewController) {
_ = stage.navigationController?.popViewController(animated: true)
}


override func viewDidLoad() {
self.navigationItem.hidesBackButton = true
let action = Sample1BAction(label: label, buttonA: nextButtonA, buttonB: nextButtonB, prevButton: prevButton)
observer.activate(action: action, director: self.director, argument: self.argument)
_ = activator?.activate(action: action)
}


override func viewDidDisappear(_ animated: Bool) {
if (self.navigationController == nil && !isReleased) {
_ = director?.exitScene()
if (self.navigationController == nil && !isRemovable) {
_ = director?.back()
}
}

}

2 changes: 1 addition & 1 deletion Example/Sample2/Scenes/Sample2/Sample2Action.swift
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ class Sample2Action: Action {

unowned let startButton: UIButton

func start(director: SceneDirector<Sample2ViewController.Sample2Link>?, argument: ()?) -> [Observable<()>] {
func start(director: SceneDirector<Sample2ViewController.Sample2Link>?, context: ()?) -> [Observable<()>] {

return [
startButton.rx.tap.do(onNext: { () in director?.changeScene(transition: Sample2ViewController.Sample2Link.A)})
Expand Down
6 changes: 3 additions & 3 deletions Example/Sample2/Scenes/Sample2/Sample2Scene.swift
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,12 @@ extension Sample2ViewController: ActionScene {

}

typealias ArgumentType = Void
typealias ContextType = Void
typealias TransitionType = Sample2Link

override func viewDidLoad() {
let action = Sample2Action(startButton: startButton)
observer.activate(action: action, director: director, argument: argument)
activator.activate(action: action, director: director, context: context)
}

public var isRemovable: Bool {
Expand All @@ -44,6 +44,6 @@ extension Sample2ViewController: ActionScene {
- Parameter factory: 前の画面への遷移リクエストを生成するインスタンスです
- Returns: SceneBackRequest 前の画面への遷移リクエストが成功したらSceneBackRequestはtrueを返します
*/
public func onRemove(stage: UIViewController) {
public func willRemove(from stage: UIViewController) {
}
}
4 changes: 2 additions & 2 deletions Example/Sample2/Scenes/Sample2A/Sample2AAction.swift
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ class Sample2AAction : Action {

unowned let prevButton: UIButton

func start(director: SceneDirector<Sample2AViewController.Sample2Link>?, argument: Bool?) -> [Observable<()>] {
prevButton.isEnabled = argument!
func start(director: SceneDirector<Sample2AViewController.Sample2Link>?, context: Bool?) -> [Observable<()>] {
prevButton.isEnabled = context!
return [
nextButtonA.rx.tap.do(onNext: { () in director?.changeScene(transition: Sample2AViewController.Sample2Link.A)}),
nextButtonB.rx.tap.do(onNext: { () in director?.changeScene(transition: Sample2AViewController.Sample2Link.B)}),
Expand Down
6 changes: 3 additions & 3 deletions Example/Sample2/Scenes/Sample2A/Sample2AScene.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import KabuKit

extension Sample2AViewController: ActionScene {

typealias ArgumentType = Bool
typealias ContextType = Bool
typealias TransitionType = Sample2Link

enum Sample2Link: SceneTransition {
Expand Down Expand Up @@ -48,14 +48,14 @@ extension Sample2AViewController: ActionScene {
- Parameter factory: 前の画面への遷移リクエストを生成するインスタンスです
- Returns: SceneBackRequest 前の画面への遷移リクエストが成功したらSceneBackRequestはtrueを返します
*/
public func onRemove(stage: UIViewController) {
public func willRemove(from stage: UIViewController) {
_ = stage.navigationController?.popViewController(animated: true)
}

override func viewDidLoad() {
self.navigationItem.hidesBackButton = true
let action = Sample2AAction(nextButtonA: nextButtonA, nextButtonB: nextButtonB, prevButton: prevButton)
observer.activate(action: action, director: director, argument: argument)
activator.activate(action: action, director: director, context: context)
}

}
4 changes: 2 additions & 2 deletions Example/Sample2/Scenes/Sample2B/Sample2BAction.swift
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ class Sample2BAction : Action {



func start(director: SceneDirector<Sample2BViewController.Sample2Link>?, argument: Bool?) -> [Observable<()>] {
prevButton.isEnabled = argument!
func start(director: SceneDirector<Sample2BViewController.Sample2Link>?, context: Bool?) -> [Observable<()>] {
prevButton.isEnabled = context!
return [
nextButtonA.rx.tap.do(onNext: { () in director?.changeScene(transition: Sample2BViewController.Sample2Link.A)}),
nextButtonB.rx.tap.do(onNext: { () in director?.changeScene(transition: Sample2BViewController.Sample2Link.B)}),
Expand Down
Loading

0 comments on commit c76e3d1

Please sign in to comment.