diff --git a/Delta.xcodeproj/project.pbxproj b/Delta.xcodeproj/project.pbxproj index 050b6ba..807d697 100644 --- a/Delta.xcodeproj/project.pbxproj +++ b/Delta.xcodeproj/project.pbxproj @@ -22,6 +22,15 @@ BF2A53FC1BB74FC10052BD0C /* SNESDeltaCore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BFC134E01AAD82460087AD7B /* SNESDeltaCore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BF2A53FD1BB74FC60052BD0C /* ZipZap.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF70798B1B6B464B0019077C /* ZipZap.framework */; }; BF2A53FE1BB74FC60052BD0C /* ZipZap.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BF70798B1B6B464B0019077C /* ZipZap.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + BF353FF21C5D7FB000C1184C /* PauseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF353FF11C5D7FB000C1184C /* PauseViewController.swift */; }; + BF353FF31C5D7FB000C1184C /* PauseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF353FF11C5D7FB000C1184C /* PauseViewController.swift */; }; + BF353FF61C5D837600C1184C /* PauseMenu.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BF353FF41C5D837600C1184C /* PauseMenu.storyboard */; }; + BF353FF71C5D837600C1184C /* PauseMenu.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BF353FF41C5D837600C1184C /* PauseMenu.storyboard */; }; + BF353FF91C5D870B00C1184C /* PauseItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF353FF81C5D870B00C1184C /* PauseItem.swift */; }; + BF353FFA1C5D870B00C1184C /* PauseItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF353FF81C5D870B00C1184C /* PauseItem.swift */; }; + BF353FFF1C5DA3C500C1184C /* PausePresentationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF353FFD1C5DA3C500C1184C /* PausePresentationController.swift */; }; + BF3540001C5DA3C500C1184C /* PausePresentationControllerContentView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BF353FFE1C5DA3C500C1184C /* PausePresentationControllerContentView.xib */; }; + BF3540021C5DA3D500C1184C /* PauseStoryboardSegue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3540011C5DA3D500C1184C /* PauseStoryboardSegue.swift */; }; BF4566E81BC090B6007BFA1A /* Model.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = BF4566E61BC090B6007BFA1A /* Model.xcdatamodeld */; }; BF4566E91BC090B6007BFA1A /* Model.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = BF4566E61BC090B6007BFA1A /* Model.xcdatamodeld */; }; BF5E7F441B9A650B00AE44F8 /* SettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF5E7F431B9A650B00AE44F8 /* SettingsViewController.swift */; }; @@ -37,10 +46,7 @@ BF762EAB1BC1B076002C8866 /* NSManagedObject+Conveniences.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF762EAA1BC1B076002C8866 /* NSManagedObject+Conveniences.swift */; }; BF762EAC1BC1B076002C8866 /* NSManagedObject+Conveniences.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF762EAA1BC1B076002C8866 /* NSManagedObject+Conveniences.swift */; }; BF797A2D1C2D339F00F1A000 /* UILabel+FontSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF797A2C1C2D339F00F1A000 /* UILabel+FontSize.swift */; }; - BF7AE8051C2E858400B1B5BC /* PausePresentationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF7AE8011C2E858400B1B5BC /* PausePresentationController.swift */; }; - BF7AE8061C2E858400B1B5BC /* PausePresentationControllerContentView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BF7AE8021C2E858400B1B5BC /* PausePresentationControllerContentView.xib */; }; - BF7AE8071C2E858400B1B5BC /* PauseStoryboardSegue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF7AE8031C2E858400B1B5BC /* PauseStoryboardSegue.swift */; }; - BF7AE8081C2E858400B1B5BC /* PauseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF7AE8041C2E858400B1B5BC /* PauseViewController.swift */; }; + BF7AE8081C2E858400B1B5BC /* PauseMenuViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF7AE8041C2E858400B1B5BC /* PauseMenuViewController.swift */; }; BF7AE80A1C2E8C7600B1B5BC /* UIColor+Delta.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF7AE8091C2E8C7600B1B5BC /* UIColor+Delta.swift */; }; BF7AE81E1C2E984300B1B5BC /* GridCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF7AE81A1C2E984300B1B5BC /* GridCollectionViewCell.swift */; }; BF7AE81F1C2E984300B1B5BC /* GridCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF7AE81A1C2E984300B1B5BC /* GridCollectionViewCell.swift */; }; @@ -122,6 +128,12 @@ BF27CC901BCB156200A20D89 /* EmulationViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EmulationViewController.swift; sourceTree = ""; }; BF27CC941BCB7B7A00A20D89 /* GameController.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GameController.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS9.0.sdk/System/Library/Frameworks/GameController.framework; sourceTree = DEVELOPER_DIR; }; BF27CC961BCC890700A20D89 /* GamesCollectionViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GamesCollectionViewController.swift; sourceTree = ""; }; + BF353FF11C5D7FB000C1184C /* PauseViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PauseViewController.swift; path = "Pause Menu/PauseViewController.swift"; sourceTree = ""; }; + BF353FF51C5D837600C1184C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/PauseMenu.storyboard; sourceTree = ""; }; + BF353FF81C5D870B00C1184C /* PauseItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PauseItem.swift; path = "Pause Menu/PauseItem.swift"; sourceTree = ""; }; + BF353FFD1C5DA3C500C1184C /* PausePresentationController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PausePresentationController.swift; path = "Pause Menu/Presentation Controller/PausePresentationController.swift"; sourceTree = ""; }; + BF353FFE1C5DA3C500C1184C /* PausePresentationControllerContentView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = PausePresentationControllerContentView.xib; path = "Pause Menu/Presentation Controller/PausePresentationControllerContentView.xib"; sourceTree = ""; }; + BF3540011C5DA3D500C1184C /* PauseStoryboardSegue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PauseStoryboardSegue.swift; path = "Pause Menu/Segues/PauseStoryboardSegue.swift"; sourceTree = ""; }; BF4566E71BC090B6007BFA1A /* Model.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Model.xcdatamodel; sourceTree = ""; }; BF5E7F431B9A650B00AE44F8 /* SettingsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsViewController.swift; sourceTree = ""; }; BF5E7F451B9A652600AE44F8 /* Settings.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Settings.storyboard; sourceTree = ""; }; @@ -135,10 +147,7 @@ BF762E9D1BC19D31002C8866 /* DatabaseManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DatabaseManager.swift; sourceTree = ""; }; BF762EAA1BC1B076002C8866 /* NSManagedObject+Conveniences.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSManagedObject+Conveniences.swift"; sourceTree = ""; }; BF797A2C1C2D339F00F1A000 /* UILabel+FontSize.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UILabel+FontSize.swift"; sourceTree = ""; }; - BF7AE8011C2E858400B1B5BC /* PausePresentationController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PausePresentationController.swift; path = "Pause Menu/PausePresentationController.swift"; sourceTree = ""; }; - BF7AE8021C2E858400B1B5BC /* PausePresentationControllerContentView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = PausePresentationControllerContentView.xib; path = "Pause Menu/PausePresentationControllerContentView.xib"; sourceTree = ""; }; - BF7AE8031C2E858400B1B5BC /* PauseStoryboardSegue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PauseStoryboardSegue.swift; path = "Pause Menu/PauseStoryboardSegue.swift"; sourceTree = ""; }; - BF7AE8041C2E858400B1B5BC /* PauseViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PauseViewController.swift; path = "Pause Menu/PauseViewController.swift"; sourceTree = ""; }; + BF7AE8041C2E858400B1B5BC /* PauseMenuViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PauseMenuViewController.swift; path = "Pause Menu/PauseMenuViewController.swift"; sourceTree = ""; }; BF7AE8091C2E8C7600B1B5BC /* UIColor+Delta.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIColor+Delta.swift"; sourceTree = ""; }; BF7AE81A1C2E984300B1B5BC /* GridCollectionViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GridCollectionViewCell.swift; path = "Collection View/GridCollectionViewCell.swift"; sourceTree = ""; }; BF7AE81D1C2E984300B1B5BC /* GridCollectionViewLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GridCollectionViewLayout.swift; path = "Collection View/GridCollectionViewLayout.swift"; sourceTree = ""; }; @@ -212,6 +221,15 @@ path = Extensions; sourceTree = ""; }; + BF353FFB1C5DA2F600C1184C /* Presentation Controller */ = { + isa = PBXGroup; + children = ( + BF353FFD1C5DA3C500C1184C /* PausePresentationController.swift */, + BF353FFE1C5DA3C500C1184C /* PausePresentationControllerContentView.xib */, + ); + name = "Presentation Controller"; + sourceTree = ""; + }; BF4566E31BC09026007BFA1A /* Common */ = { isa = PBXGroup; children = ( @@ -277,10 +295,12 @@ BF7AE7FA1C2E851F00B1B5BC /* Pause Menu */ = { isa = PBXGroup; children = ( - BF7AE8041C2E858400B1B5BC /* PauseViewController.swift */, - BF7AE8031C2E858400B1B5BC /* PauseStoryboardSegue.swift */, - BF7AE8011C2E858400B1B5BC /* PausePresentationController.swift */, - BF7AE8021C2E858400B1B5BC /* PausePresentationControllerContentView.xib */, + BF353FF41C5D837600C1184C /* PauseMenu.storyboard */, + BF353FF11C5D7FB000C1184C /* PauseViewController.swift */, + BF7AE8041C2E858400B1B5BC /* PauseMenuViewController.swift */, + BF353FF81C5D870B00C1184C /* PauseItem.swift */, + BF353FFB1C5DA2F600C1184C /* Presentation Controller */, + BF912E481C5CB5D50041527C /* Segues */, ); name = "Pause Menu"; sourceTree = ""; @@ -293,6 +313,14 @@ path = "Supporting Files"; sourceTree = ""; }; + BF912E481C5CB5D50041527C /* Segues */ = { + isa = PBXGroup; + children = ( + BF3540011C5DA3D500C1184C /* PauseStoryboardSegue.swift */, + ); + name = Segues; + sourceTree = ""; + }; BF9257571BD8244800B109DA /* Collection View */ = { isa = PBXGroup; children = ( @@ -509,6 +537,7 @@ files = ( BF6BB2461BB73FE800CCF94A /* Assets.xcassets in Resources */, BF6BB2441BB73FE800CCF94A /* Main.storyboard in Resources */, + BF353FF71C5D837600C1184C /* PauseMenu.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -517,9 +546,10 @@ buildActionMask = 2147483647; files = ( BFFA71E21AAC406100EE9DD1 /* Main.storyboard in Resources */, - BF7AE8061C2E858400B1B5BC /* PausePresentationControllerContentView.xib in Resources */, + BF3540001C5DA3C500C1184C /* PausePresentationControllerContentView.xib in Resources */, BFFA71E71AAC406100EE9DD1 /* LaunchScreen.xib in Resources */, BF5E7F461B9A652600AE44F8 /* Settings.storyboard in Resources */, + BF353FF61C5D837600C1184C /* PauseMenu.storyboard in Resources */, BF27CC8E1BC9FEA200A20D89 /* Assets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -636,6 +666,8 @@ BF27CC911BCB156200A20D89 /* EmulationViewController.swift in Sources */, BFB141191BE46934004FBF46 /* GameCollectionViewDataSource.swift in Sources */, BFF1E5651BE04CAF000E9EF6 /* BoxArtImageView.swift in Sources */, + BF353FFA1C5D870B00C1184C /* PauseItem.swift in Sources */, + BF353FF31C5D7FB000C1184C /* PauseViewController.swift in Sources */, BF6BB23F1BB73FE800CCF94A /* AppDelegate.swift in Sources */, BF4566E91BC090B6007BFA1A /* Model.xcdatamodeld in Sources */, BF762EAC1BC1B076002C8866 /* NSManagedObject+Conveniences.swift in Sources */, @@ -651,7 +683,7 @@ BFB141181BE46934004FBF46 /* GameCollectionViewDataSource.swift in Sources */, BFFB709F1AF99B1700DE56FE /* EmulationViewController.swift in Sources */, BFAA1FF41B8AD7F900495943 /* ControllersSettingsViewController.swift in Sources */, - BF7AE8071C2E858400B1B5BC /* PauseStoryboardSegue.swift in Sources */, + BF353FF91C5D870B00C1184C /* PauseItem.swift in Sources */, BF27CC971BCC890700A20D89 /* GamesCollectionViewController.swift in Sources */, BFFA71DD1AAC406100EE9DD1 /* AppDelegate.swift in Sources */, BF7AE81E1C2E984300B1B5BC /* GridCollectionViewCell.swift in Sources */, @@ -661,22 +693,32 @@ BFC2731A1BE6152200D22B05 /* GameCollection.swift in Sources */, BFF1E5641BE04CAF000E9EF6 /* BoxArtImageView.swift in Sources */, BF762EAB1BC1B076002C8866 /* NSManagedObject+Conveniences.swift in Sources */, + BF353FFF1C5DA3C500C1184C /* PausePresentationController.swift in Sources */, BF7AE80A1C2E8C7600B1B5BC /* UIColor+Delta.swift in Sources */, BF762E9E1BC19D31002C8866 /* DatabaseManager.swift in Sources */, BF090CF41B490D8300DCAB45 /* UIDevice+Vibration.m in Sources */, BF797A2D1C2D339F00F1A000 /* UILabel+FontSize.swift in Sources */, + BF3540021C5DA3D500C1184C /* PauseStoryboardSegue.swift in Sources */, BF107EC41BF413F000E0C32C /* GamesViewController.swift in Sources */, BF5E7F441B9A650B00AE44F8 /* SettingsViewController.swift in Sources */, + BF353FF21C5D7FB000C1184C /* PauseViewController.swift in Sources */, BFDB28451BC9DA7B001D0C83 /* GamePickerController.swift in Sources */, - BF7AE8051C2E858400B1B5BC /* PausePresentationController.swift in Sources */, BFDE393A1BC0CEDF003F72E8 /* Game+CoreDataProperties.swift in Sources */, - BF7AE8081C2E858400B1B5BC /* PauseViewController.swift in Sources */, + BF7AE8081C2E858400B1B5BC /* PauseMenuViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ + BF353FF41C5D837600C1184C /* PauseMenu.storyboard */ = { + isa = PBXVariantGroup; + children = ( + BF353FF51C5D837600C1184C /* Base */, + ); + name = PauseMenu.storyboard; + sourceTree = ""; + }; BF6BB2421BB73FE800CCF94A /* Main.storyboard */ = { isa = PBXVariantGroup; children = ( diff --git a/Delta/Base.lproj/Main.storyboard b/Delta/Base.lproj/Main.storyboard index c38f600..8057667 100644 --- a/Delta/Base.lproj/Main.storyboard +++ b/Delta/Base.lproj/Main.storyboard @@ -1,8 +1,7 @@ - + - @@ -152,123 +151,13 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -308,23 +197,13 @@ - - + + - - - - - - - - - - - - + + - + diff --git a/Delta/Base.lproj/PauseMenu.storyboard b/Delta/Base.lproj/PauseMenu.storyboard new file mode 100644 index 0000000..bd60e35 --- /dev/null +++ b/Delta/Base.lproj/PauseMenu.storyboard @@ -0,0 +1,143 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Delta/Emulation/EmulationViewController.swift b/Delta/Emulation/EmulationViewController.swift index 7ddd159..ddda9bc 100644 --- a/Delta/Emulation/EmulationViewController.swift +++ b/Delta/Emulation/EmulationViewController.swift @@ -140,27 +140,25 @@ class EmulationViewController: UIViewController if segue.identifier == "pauseSegue" { - if let destinationViewController = segue.destinationViewController as? UINavigationController, pauseViewController = destinationViewController.topViewController as? PauseViewController - { - pauseViewController.pauseText = self.game.name - - let dismissAction: (PauseItem -> Void) = { item in - pauseViewController.dismiss() - } - - let saveStateItem = PauseItem(image: UIImage(named: "SmallPause")!, text: NSLocalizedString("Save State", comment: ""), action: dismissAction) - let loadStateItem = PauseItem(image: UIImage(named: "SmallPause")!, text: NSLocalizedString("Load State", comment: ""), action: dismissAction) - let cheatCodesItem = PauseItem(image: UIImage(named: "SmallPause")!, text: NSLocalizedString("Cheat Codes", comment: ""), action: dismissAction) - let sustainButtonItem = PauseItem(image: UIImage(named: "SmallPause")!, text: NSLocalizedString("Sustain Button", comment: ""), action: dismissAction) - - var fastForwardItem = PauseItem(image: UIImage(named: "FastForward")!, text: NSLocalizedString("Fast Forward", comment: ""), action: { [weak self] item in - self?.emulatorCore.fastForwarding = item.selected - }) - fastForwardItem.selected = self.emulatorCore.fastForwarding - - pauseViewController.items = [saveStateItem, loadStateItem, cheatCodesItem, fastForwardItem, sustainButtonItem] + let pauseViewController = segue.destinationViewController as! PauseViewController + pauseViewController.pauseText = self.game.name + + let dismissAction: (PauseItem -> Void) = { item in + pauseViewController.dismiss() } + let saveStateItem = PauseItem(image: UIImage(named: "SmallPause")!, text: NSLocalizedString("Save State", comment: ""), action: dismissAction) + let loadStateItem = PauseItem(image: UIImage(named: "SmallPause")!, text: NSLocalizedString("Load State", comment: ""), action: dismissAction) + let cheatCodesItem = PauseItem(image: UIImage(named: "SmallPause")!, text: NSLocalizedString("Cheat Codes", comment: ""), action: dismissAction) + let sustainButtonItem = PauseItem(image: UIImage(named: "SmallPause")!, text: NSLocalizedString("Sustain Button", comment: ""), action: dismissAction) + + var fastForwardItem = PauseItem(image: UIImage(named: "FastForward")!, text: NSLocalizedString("Fast Forward", comment: ""), action: { [weak self] item in + self?.emulatorCore.fastForwarding = item.selected + }) + fastForwardItem.selected = self.emulatorCore.fastForwarding + + pauseViewController.items = [saveStateItem, loadStateItem, cheatCodesItem, fastForwardItem, sustainButtonItem] + self._isPauseViewControllerPresented = true } } diff --git a/Delta/Pause Menu/PauseItem.swift b/Delta/Pause Menu/PauseItem.swift new file mode 100644 index 0000000..1894ee1 --- /dev/null +++ b/Delta/Pause Menu/PauseItem.swift @@ -0,0 +1,30 @@ +// +// PauseItem.swift +// Delta +// +// Created by Riley Testut on 1/30/16. +// Copyright © 2016 Riley Testut. All rights reserved. +// + +import UIKit + +struct PauseItem: Equatable +{ + let image: UIImage + let text: String + let action: (PauseItem -> Void) + + var selected = false + + init(image: UIImage, text: String, action: (PauseItem -> Void)) + { + self.image = image + self.text = text + self.action = action + } +} + +func ==(lhs: PauseItem, rhs: PauseItem) -> Bool +{ + return (lhs.image == rhs.image) && (lhs.text == rhs.text) +} \ No newline at end of file diff --git a/Delta/Pause Menu/PauseMenuViewController.swift b/Delta/Pause Menu/PauseMenuViewController.swift new file mode 100644 index 0000000..a625cc0 --- /dev/null +++ b/Delta/Pause Menu/PauseMenuViewController.swift @@ -0,0 +1,134 @@ +// +// PauseMenuViewController.swift +// Delta +// +// Created by Riley Testut on 12/21/15. +// Copyright © 2015 Riley Testut. All rights reserved. +// + +import UIKit +import Roxas + +class PauseMenuViewController: UICollectionViewController +{ + var items = [PauseItem]() { + didSet + { + guard oldValue != self.items else { return } + + if self.items.count > 8 + { + fatalError("PauseViewController only supports up to 8 items (for my sanity when laying out on a landscape iPhone 4s") + } + + self.collectionView?.reloadData() + } + } + + override var preferredContentSize: CGSize { + set { } + get { return self.collectionView?.contentSize ?? CGSizeZero } + } + + private var prototypeCell = GridCollectionViewCell() + + override func viewDidLoad() + { + super.viewDidLoad() + + let collectionViewLayout = self.collectionViewLayout as! GridCollectionViewLayout + collectionViewLayout.itemWidth = 90 + collectionViewLayout.usesEqualHorizontalSpacingDistributionForSingleRow = true + + // Manually update prototype cell properties + self.prototypeCell.contentView.widthAnchor.constraintEqualToConstant(collectionViewLayout.itemWidth).active = true + } +} + +private extension PauseMenuViewController +{ + func configureCollectionViewCell(cell: GridCollectionViewCell, forIndexPath indexPath: NSIndexPath) + { + let pauseItem = self.items[indexPath.item] + + cell.maximumImageSize = CGSize(width: 60, height: 60) + + cell.imageView.image = pauseItem.image + cell.imageView.contentMode = .Center + cell.imageView.layer.borderWidth = 2 + cell.imageView.layer.borderColor = UIColor.whiteColor().CGColor + cell.imageView.layer.cornerRadius = 10 + + cell.textLabel.text = pauseItem.text + cell.textLabel.textColor = UIColor.whiteColor() + + if pauseItem.selected + { + cell.imageView.tintColor = UIColor.blackColor() + cell.imageView.backgroundColor = UIColor.whiteColor() + } + else + { + cell.imageView.tintColor = UIColor.whiteColor() + cell.imageView.backgroundColor = UIColor.clearColor() + } + } + + func toggleSelectedStateForPauseItemAtIndexPath(indexPath: NSIndexPath) + { + var pauseItem = self.items[indexPath.item] + pauseItem.selected = !pauseItem.selected + self.items[indexPath.item] = pauseItem + + let cell = self.collectionView!.cellForItemAtIndexPath(indexPath) as! GridCollectionViewCell + self.configureCollectionViewCell(cell, forIndexPath: indexPath) + } +} + +extension PauseMenuViewController +{ + override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int + { + return self.items.count + } + + override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell + { + let cell = collectionView.dequeueReusableCellWithReuseIdentifier(RSTGenericCellIdentifier, forIndexPath: indexPath) as! GridCollectionViewCell + self.configureCollectionViewCell(cell, forIndexPath: indexPath) + return cell + } +} + +extension PauseMenuViewController: UICollectionViewDelegateFlowLayout +{ + func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize + { + self.configureCollectionViewCell(self.prototypeCell, forIndexPath: indexPath) + + let size = self.prototypeCell.contentView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize) + return size + } +} + +extension PauseMenuViewController +{ + override func collectionView(collectionView: UICollectionView, didHighlightItemAtIndexPath indexPath: NSIndexPath) + { + self.toggleSelectedStateForPauseItemAtIndexPath(indexPath) + } + + override func collectionView(collectionView: UICollectionView, didUnhighlightItemAtIndexPath indexPath: NSIndexPath) + { + self.toggleSelectedStateForPauseItemAtIndexPath(indexPath) + } + + override func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) + { + self.toggleSelectedStateForPauseItemAtIndexPath(indexPath) + + let pauseItem = self.items[indexPath.item] + pauseItem.action(pauseItem) + } +} + diff --git a/Delta/Pause Menu/PauseViewController.swift b/Delta/Pause Menu/PauseViewController.swift index 4ead75d..80cfae9 100644 --- a/Delta/Pause Menu/PauseViewController.swift +++ b/Delta/Pause Menu/PauseViewController.swift @@ -2,176 +2,84 @@ // PauseViewController.swift // Delta // -// Created by Riley Testut on 12/21/15. -// Copyright © 2015 Riley Testut. All rights reserved. +// Created by Riley Testut on 1/30/16. +// Copyright © 2016 Riley Testut. All rights reserved. // import UIKit -struct PauseItem: Equatable -{ - let image: UIImage - let text: String - let action: (PauseItem -> Void) - - var selected = false - - init(image: UIImage, text: String, action: (PauseItem -> Void)) - { - self.image = image - self.text = text - self.action = action - } -} - -func ==(lhs: PauseItem, rhs: PauseItem) -> Bool -{ - return (lhs.image == rhs.image) && (lhs.text == rhs.text) -} - class PauseViewController: UIViewController, PauseInfoProvidable { - var items = [PauseItem]() { - didSet + /// Pause Items + var items = [PauseItem]() + + /// + var pauseText: String? = nil + + /// UIViewController + override var preferredContentSize: CGSize { + set { } + get { - guard oldValue != self.items else { return } - - if self.items.count > 8 + var preferredContentSize = self.pauseNavigationController.topViewController?.preferredContentSize ?? CGSizeZero + if preferredContentSize.height > 0 { - fatalError("PauseViewController only supports up to 8 items (for my sanity when laying out on a landscape iPhone 4s") + preferredContentSize.height += self.pauseNavigationController.navigationBar.bounds.height } - self.collectionView?.reloadData() + return preferredContentSize } } - var pauseText: String? = nil - - override var preferredContentSize: CGSize { - set { } - get { return self.collectionView.contentSize } + private var pauseNavigationController: UINavigationController! +} + +extension PauseViewController +{ + override func viewDidLoad() + { + super.viewDidLoad() } - @IBOutlet private(set) var collectionView: UICollectionView! - private var collectionViewLayout: GridCollectionViewLayout { - return self.collectionView.collectionViewLayout as! GridCollectionViewLayout + override func didReceiveMemoryWarning() + { + super.didReceiveMemoryWarning() } - private var prototypeCell = GridCollectionViewCell() - override func preferredStatusBarStyle() -> UIStatusBarStyle { return .LightContent } - override func viewDidLoad() + override func viewDidLayoutSubviews() { - super.viewDidLoad() + super.viewDidLayoutSubviews() - self.collectionView.registerClass(GridCollectionViewCell.self, forCellWithReuseIdentifier: "Cell") - - self.collectionViewLayout.itemWidth = 90 - self.collectionViewLayout.usesEqualHorizontalSpacingDistributionForSingleRow = true - - self.navigationItem.rightBarButtonItem?.tintColor = UIColor.deltaLightPurpleColor() - - // Manually update prototype cell properties - self.prototypeCell.contentView.widthAnchor.constraintEqualToConstant(self.collectionViewLayout.itemWidth).active = true + // Ensure navigation bar is always positioned correctly despite being outside the navigation controller's view + self.pauseNavigationController.navigationBar.frame = CGRect(x: 0, y: 0, width: self.view.bounds.width, height: self.pauseNavigationController.navigationBar.bounds.height) + } + + override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) + { + if segue.identifier == "embedNavigationController" + { + self.pauseNavigationController = segue.destinationViewController as! UINavigationController + self.pauseNavigationController.navigationBar.tintColor = UIColor.deltaLightPurpleColor() + self.pauseNavigationController.view.backgroundColor = UIColor.clearColor() + + let pauseMenuViewController = self.pauseNavigationController.topViewController as! PauseMenuViewController + pauseMenuViewController.items = self.items + + // Keep navigation bar outside the UIVisualEffectView's + self.view.addSubview(self.pauseNavigationController.navigationBar) + } } } -internal extension PauseViewController +extension PauseViewController { func dismiss() { - self.performSegueWithIdentifier("unwindPauseSegue", sender: self) + self.performSegueWithIdentifier("unwindFromPauseMenu", sender: self) } -} - -private extension PauseViewController -{ - func configureCollectionViewCell(cell: GridCollectionViewCell, forIndexPath indexPath: NSIndexPath) - { - let pauseItem = self.items[indexPath.item] - - cell.maximumImageSize = CGSize(width: 60, height: 60) - - cell.imageView.image = pauseItem.image - cell.imageView.contentMode = .Center - cell.imageView.layer.borderWidth = 2 - cell.imageView.layer.borderColor = UIColor.whiteColor().CGColor - cell.imageView.layer.cornerRadius = 10 - - cell.textLabel.text = pauseItem.text - cell.textLabel.textColor = UIColor.whiteColor() - - if pauseItem.selected - { - cell.imageView.tintColor = UIColor.blackColor() - cell.imageView.backgroundColor = UIColor.whiteColor() - } - else - { - cell.imageView.tintColor = UIColor.whiteColor() - cell.imageView.backgroundColor = UIColor.clearColor() - } - } - - func toggleSelectedStateForPauseItemAtIndexPath(indexPath: NSIndexPath) - { - var pauseItem = self.items[indexPath.item] - pauseItem.selected = !pauseItem.selected - self.items[indexPath.item] = pauseItem - - let cell = self.collectionView.cellForItemAtIndexPath(indexPath) as! GridCollectionViewCell - self.configureCollectionViewCell(cell, forIndexPath: indexPath) - } -} - -extension PauseViewController: UICollectionViewDataSource -{ - func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int - { - return self.items.count - } - - func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell - { - let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! GridCollectionViewCell - self.configureCollectionViewCell(cell, forIndexPath: indexPath) - return cell - } -} - -extension PauseViewController: UICollectionViewDelegateFlowLayout -{ - func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize - { - self.configureCollectionViewCell(self.prototypeCell, forIndexPath: indexPath) - - let size = self.prototypeCell.contentView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize) - return size - } -} - -extension PauseViewController: UICollectionViewDelegate -{ - func collectionView(collectionView: UICollectionView, didHighlightItemAtIndexPath indexPath: NSIndexPath) - { - self.toggleSelectedStateForPauseItemAtIndexPath(indexPath) - } - - func collectionView(collectionView: UICollectionView, didUnhighlightItemAtIndexPath indexPath: NSIndexPath) - { - self.toggleSelectedStateForPauseItemAtIndexPath(indexPath) - } - - func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) - { - self.toggleSelectedStateForPauseItemAtIndexPath(indexPath) - - let pauseItem = self.items[indexPath.item] - pauseItem.action(pauseItem) - } -} - +} \ No newline at end of file diff --git a/Delta/Pause Menu/PausePresentationController.swift b/Delta/Pause Menu/Presentation Controller/PausePresentationController.swift similarity index 94% rename from Delta/Pause Menu/PausePresentationController.swift rename to Delta/Pause Menu/Presentation Controller/PausePresentationController.swift index cc618f7..73fec50 100644 --- a/Delta/Pause Menu/PausePresentationController.swift +++ b/Delta/Pause Menu/Presentation Controller/PausePresentationController.swift @@ -39,17 +39,12 @@ class PausePresentationController: UIPresentationController { guard let containerView = self.containerView else { return super.frameOfPresentedViewInContainerView() } - let contentHeight: CGFloat + var contentHeight = self.presentedViewController.preferredContentSize.height + if contentHeight == 0 + { + contentHeight = containerView.bounds.height - UIApplication.sharedApplication().statusBarFrame.height + } - if let navigationController = self.presentedViewController as? UINavigationController, topViewController = navigationController.topViewController - { - contentHeight = topViewController.preferredContentSize.height + navigationController.navigationBar.bounds.height - } - else - { - contentHeight = self.presentedViewController.preferredContentSize.height - } - let frame = CGRect(x: 0, y: containerView.bounds.height - contentHeight, width: containerView.bounds.width, height: containerView.bounds.height) return frame } @@ -90,7 +85,7 @@ class PausePresentationController: UIPresentationController self.contentView.alpha = 1.0 }, completion: nil) - } + } override func dismissalTransitionWillBegin() { @@ -150,6 +145,7 @@ class PausePresentationController: UIPresentationController // Ensure width is correct self.presentedView()?.bounds.size.width = self.containerView!.bounds.width + self.presentedView()?.setNeedsLayout() self.presentedView()?.layoutIfNeeded() self.presentedView()?.frame = self.frameOfPresentedViewInContainerView() diff --git a/Delta/Pause Menu/PausePresentationControllerContentView.xib b/Delta/Pause Menu/Presentation Controller/PausePresentationControllerContentView.xib similarity index 100% rename from Delta/Pause Menu/PausePresentationControllerContentView.xib rename to Delta/Pause Menu/Presentation Controller/PausePresentationControllerContentView.xib diff --git a/Delta/Pause Menu/PauseStoryboardSegue.swift b/Delta/Pause Menu/Segues/PauseStoryboardSegue.swift similarity index 97% rename from Delta/Pause Menu/PauseStoryboardSegue.swift rename to Delta/Pause Menu/Segues/PauseStoryboardSegue.swift index 72bd396..09bd53f 100644 --- a/Delta/Pause Menu/PauseStoryboardSegue.swift +++ b/Delta/Pause Menu/Segues/PauseStoryboardSegue.swift @@ -56,7 +56,7 @@ extension PauseStoryboardSegue: UIViewControllerAnimatedTransitioning func animateTransition(transitionContext: UIViewControllerContextTransitioning) { - let destinationViewController = transitionContext.viewControllerForKey(UITransitionContextToViewControllerKey) as! UINavigationController + let destinationViewController = transitionContext.viewControllerForKey(UITransitionContextToViewControllerKey)! destinationViewController.view.frame = transitionContext.finalFrameForViewController(destinationViewController) destinationViewController.view.frame.origin.y = transitionContext.containerView()!.bounds.height diff --git a/External/Roxas b/External/Roxas index 325d2c7..41ed3e9 160000 --- a/External/Roxas +++ b/External/Roxas @@ -1 +1 @@ -Subproject commit 325d2c786bcb9cc61389257023399282e1d8071d +Subproject commit 41ed3e9fcc247258a83e103f8816dbc07652c75a