From 7758f053fe4c3a4078d789bc7ced0517f89cdc31 Mon Sep 17 00:00:00 2001 From: Michael Redig Date: Mon, 22 Apr 2019 17:29:16 -0500 Subject: [PATCH 1/7] reorganized and did a lot of stuff --- Poll/Poll.xcodeproj/project.pbxproj | 510 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../UserInterfaceState.xcuserstate | Bin 0 -> 18632 bytes .../xcschemes/xcschememanagement.plist | 14 + Poll/Poll/Resources/AppDelegate.swift | 46 ++ .../AppIcon.appiconset/Contents.json | 98 ++++ .../Resources/Assets.xcassets/Contents.json | 6 + Poll/Poll/Resources/Info.plist | 45 ++ Poll/Poll/Resources/colorNames.json | 1 + .../Base.lproj/LaunchScreen.storyboard | 25 + .../Storyboards/Base.lproj/Main.storyboard | 29 + Poll/Poll/Storyboards/Voting.storyboard | 74 +++ .../VotingViewController.swift | 36 ++ Poll/Poll/Vote.swift | 20 + Poll/Poll/VoteController.swift | 22 + Poll/PollTests/Info.plist | 22 + Poll/PollTests/PollTests.swift | 34 ++ 18 files changed, 997 insertions(+) create mode 100644 Poll/Poll.xcodeproj/project.pbxproj create mode 100644 Poll/Poll.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 Poll/Poll.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 Poll/Poll.xcodeproj/project.xcworkspace/xcuserdata/mredig.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 Poll/Poll.xcodeproj/xcuserdata/mredig.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 Poll/Poll/Resources/AppDelegate.swift create mode 100644 Poll/Poll/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Poll/Poll/Resources/Assets.xcassets/Contents.json create mode 100644 Poll/Poll/Resources/Info.plist create mode 100644 Poll/Poll/Resources/colorNames.json create mode 100644 Poll/Poll/Storyboards/Base.lproj/LaunchScreen.storyboard create mode 100644 Poll/Poll/Storyboards/Base.lproj/Main.storyboard create mode 100644 Poll/Poll/Storyboards/Voting.storyboard create mode 100644 Poll/Poll/View Controllers/VotingViewController.swift create mode 100644 Poll/Poll/Vote.swift create mode 100644 Poll/Poll/VoteController.swift create mode 100644 Poll/PollTests/Info.plist create mode 100644 Poll/PollTests/PollTests.swift diff --git a/Poll/Poll.xcodeproj/project.pbxproj b/Poll/Poll.xcodeproj/project.pbxproj new file mode 100644 index 0000000..221bb0f --- /dev/null +++ b/Poll/Poll.xcodeproj/project.pbxproj @@ -0,0 +1,510 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + 33FE866F226E736200DC2DF1 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33FE866E226E736200DC2DF1 /* AppDelegate.swift */; }; + 33FE8674226E736200DC2DF1 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 33FE8672226E736200DC2DF1 /* Main.storyboard */; }; + 33FE8676226E736400DC2DF1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33FE8675226E736400DC2DF1 /* Assets.xcassets */; }; + 33FE8679226E736400DC2DF1 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 33FE8677226E736400DC2DF1 /* LaunchScreen.storyboard */; }; + 33FE8684226E736500DC2DF1 /* PollTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33FE8683226E736500DC2DF1 /* PollTests.swift */; }; + 33FE868F226E740500DC2DF1 /* Vote.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33FE868E226E740500DC2DF1 /* Vote.swift */; }; + 33FE8691226E748300DC2DF1 /* colorNames.json in Resources */ = {isa = PBXBuildFile; fileRef = 33FE8690226E748200DC2DF1 /* colorNames.json */; }; + 33FE8693226E74B500DC2DF1 /* VoteController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33FE8692226E74B500DC2DF1 /* VoteController.swift */; }; + 33FE8695226E75B400DC2DF1 /* Voting.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 33FE8694226E75B400DC2DF1 /* Voting.storyboard */; }; + 33FE8697226E76B500DC2DF1 /* VotingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33FE8696226E76B500DC2DF1 /* VotingViewController.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 33FE8680226E736500DC2DF1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33FE8663226E736200DC2DF1 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33FE866A226E736200DC2DF1; + remoteInfo = Poll; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 33FE866B226E736200DC2DF1 /* Poll.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Poll.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 33FE866E226E736200DC2DF1 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33FE8673226E736200DC2DF1 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 33FE8675226E736400DC2DF1 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 33FE8678226E736400DC2DF1 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 33FE867A226E736400DC2DF1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 33FE867F226E736500DC2DF1 /* PollTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PollTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 33FE8683226E736500DC2DF1 /* PollTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PollTests.swift; sourceTree = ""; }; + 33FE8685226E736500DC2DF1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 33FE868E226E740500DC2DF1 /* Vote.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Vote.swift; sourceTree = ""; }; + 33FE8690226E748200DC2DF1 /* colorNames.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = colorNames.json; sourceTree = ""; }; + 33FE8692226E74B500DC2DF1 /* VoteController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VoteController.swift; sourceTree = ""; }; + 33FE8694226E75B400DC2DF1 /* Voting.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Voting.storyboard; sourceTree = ""; }; + 33FE8696226E76B500DC2DF1 /* VotingViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VotingViewController.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 33FE8668226E736200DC2DF1 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33FE867C226E736500DC2DF1 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 33FE8662226E736200DC2DF1 = { + isa = PBXGroup; + children = ( + 33FE866D226E736200DC2DF1 /* Poll */, + 33FE8682226E736500DC2DF1 /* PollTests */, + 33FE866C226E736200DC2DF1 /* Products */, + ); + sourceTree = ""; + }; + 33FE866C226E736200DC2DF1 /* Products */ = { + isa = PBXGroup; + children = ( + 33FE866B226E736200DC2DF1 /* Poll.app */, + 33FE867F226E736500DC2DF1 /* PollTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 33FE866D226E736200DC2DF1 /* Poll */ = { + isa = PBXGroup; + children = ( + 33FE868E226E740500DC2DF1 /* Vote.swift */, + 33FE8692226E74B500DC2DF1 /* VoteController.swift */, + 33FE8698226E777A00DC2DF1 /* Storyboards */, + 33FE869A226E77AD00DC2DF1 /* View Controllers */, + 33FE8699226E778B00DC2DF1 /* Resources */, + ); + path = Poll; + sourceTree = ""; + }; + 33FE8682226E736500DC2DF1 /* PollTests */ = { + isa = PBXGroup; + children = ( + 33FE8683226E736500DC2DF1 /* PollTests.swift */, + 33FE8685226E736500DC2DF1 /* Info.plist */, + ); + path = PollTests; + sourceTree = ""; + }; + 33FE8698226E777A00DC2DF1 /* Storyboards */ = { + isa = PBXGroup; + children = ( + 33FE8677226E736400DC2DF1 /* LaunchScreen.storyboard */, + 33FE8672226E736200DC2DF1 /* Main.storyboard */, + 33FE8694226E75B400DC2DF1 /* Voting.storyboard */, + ); + path = Storyboards; + sourceTree = ""; + }; + 33FE8699226E778B00DC2DF1 /* Resources */ = { + isa = PBXGroup; + children = ( + 33FE8690226E748200DC2DF1 /* colorNames.json */, + 33FE8675226E736400DC2DF1 /* Assets.xcassets */, + 33FE866E226E736200DC2DF1 /* AppDelegate.swift */, + 33FE867A226E736400DC2DF1 /* Info.plist */, + ); + path = Resources; + sourceTree = ""; + }; + 33FE869A226E77AD00DC2DF1 /* View Controllers */ = { + isa = PBXGroup; + children = ( + 33FE8696226E76B500DC2DF1 /* VotingViewController.swift */, + ); + path = "View Controllers"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 33FE866A226E736200DC2DF1 /* Poll */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33FE8688226E736500DC2DF1 /* Build configuration list for PBXNativeTarget "Poll" */; + buildPhases = ( + 33FE8667226E736200DC2DF1 /* Sources */, + 33FE8668226E736200DC2DF1 /* Frameworks */, + 33FE8669226E736200DC2DF1 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Poll; + productName = Poll; + productReference = 33FE866B226E736200DC2DF1 /* Poll.app */; + productType = "com.apple.product-type.application"; + }; + 33FE867E226E736500DC2DF1 /* PollTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33FE868B226E736500DC2DF1 /* Build configuration list for PBXNativeTarget "PollTests" */; + buildPhases = ( + 33FE867B226E736500DC2DF1 /* Sources */, + 33FE867C226E736500DC2DF1 /* Frameworks */, + 33FE867D226E736500DC2DF1 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 33FE8681226E736500DC2DF1 /* PBXTargetDependency */, + ); + name = PollTests; + productName = PollTests; + productReference = 33FE867F226E736500DC2DF1 /* PollTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33FE8663226E736200DC2DF1 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1020; + LastUpgradeCheck = 1020; + ORGANIZATIONNAME = "Michael Redig"; + TargetAttributes = { + 33FE866A226E736200DC2DF1 = { + CreatedOnToolsVersion = 10.2.1; + }; + 33FE867E226E736500DC2DF1 = { + CreatedOnToolsVersion = 10.2.1; + TestTargetID = 33FE866A226E736200DC2DF1; + }; + }; + }; + buildConfigurationList = 33FE8666226E736200DC2DF1 /* Build configuration list for PBXProject "Poll" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33FE8662226E736200DC2DF1; + productRefGroup = 33FE866C226E736200DC2DF1 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33FE866A226E736200DC2DF1 /* Poll */, + 33FE867E226E736500DC2DF1 /* PollTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 33FE8669226E736200DC2DF1 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33FE8679226E736400DC2DF1 /* LaunchScreen.storyboard in Resources */, + 33FE8695226E75B400DC2DF1 /* Voting.storyboard in Resources */, + 33FE8676226E736400DC2DF1 /* Assets.xcassets in Resources */, + 33FE8691226E748300DC2DF1 /* colorNames.json in Resources */, + 33FE8674226E736200DC2DF1 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33FE867D226E736500DC2DF1 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 33FE8667226E736200DC2DF1 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33FE8693226E74B500DC2DF1 /* VoteController.swift in Sources */, + 33FE866F226E736200DC2DF1 /* AppDelegate.swift in Sources */, + 33FE868F226E740500DC2DF1 /* Vote.swift in Sources */, + 33FE8697226E76B500DC2DF1 /* VotingViewController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33FE867B226E736500DC2DF1 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33FE8684226E736500DC2DF1 /* PollTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 33FE8681226E736500DC2DF1 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33FE866A226E736200DC2DF1 /* Poll */; + targetProxy = 33FE8680226E736500DC2DF1 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33FE8672226E736200DC2DF1 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 33FE8673226E736200DC2DF1 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 33FE8677226E736400DC2DF1 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 33FE8678226E736400DC2DF1 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 33FE8686226E736500DC2DF1 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.2; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33FE8687226E736500DC2DF1 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.2; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 33FE8689226E736500DC2DF1 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = L5UZAT7KA9; + INFOPLIST_FILE = "$(SRCROOT)/Poll/Resources/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.redeggproductions.Poll; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 33FE868A226E736500DC2DF1 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = L5UZAT7KA9; + INFOPLIST_FILE = "$(SRCROOT)/Poll/Resources/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.redeggproductions.Poll; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + 33FE868C226E736500DC2DF1 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = L5UZAT7KA9; + INFOPLIST_FILE = PollTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.redeggproductions.PollTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Poll.app/Poll"; + }; + name = Debug; + }; + 33FE868D226E736500DC2DF1 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = L5UZAT7KA9; + INFOPLIST_FILE = PollTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.redeggproductions.PollTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Poll.app/Poll"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 33FE8666226E736200DC2DF1 /* Build configuration list for PBXProject "Poll" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33FE8686226E736500DC2DF1 /* Debug */, + 33FE8687226E736500DC2DF1 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33FE8688226E736500DC2DF1 /* Build configuration list for PBXNativeTarget "Poll" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33FE8689226E736500DC2DF1 /* Debug */, + 33FE868A226E736500DC2DF1 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33FE868B226E736500DC2DF1 /* Build configuration list for PBXNativeTarget "PollTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33FE868C226E736500DC2DF1 /* Debug */, + 33FE868D226E736500DC2DF1 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33FE8663226E736200DC2DF1 /* Project object */; +} diff --git a/Poll/Poll.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Poll/Poll.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..9d02d16 --- /dev/null +++ b/Poll/Poll.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Poll/Poll.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Poll/Poll.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/Poll/Poll.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/Poll/Poll.xcodeproj/project.xcworkspace/xcuserdata/mredig.xcuserdatad/UserInterfaceState.xcuserstate b/Poll/Poll.xcodeproj/project.xcworkspace/xcuserdata/mredig.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..6e59524f6ec3c19c43bc486e31b12e22ac870c9a GIT binary patch literal 18632 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 q|H1sF`OEX0^IP)QyJ8UEcf`~LuACwMLZ literal 0 HcmV?d00001 diff --git a/Poll/Poll.xcodeproj/xcuserdata/mredig.xcuserdatad/xcschemes/xcschememanagement.plist b/Poll/Poll.xcodeproj/xcuserdata/mredig.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..33cf63c --- /dev/null +++ b/Poll/Poll.xcodeproj/xcuserdata/mredig.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + Poll.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/Poll/Poll/Resources/AppDelegate.swift b/Poll/Poll/Resources/AppDelegate.swift new file mode 100644 index 0000000..59aec23 --- /dev/null +++ b/Poll/Poll/Resources/AppDelegate.swift @@ -0,0 +1,46 @@ +// +// AppDelegate.swift +// Poll +// +// Created by Michael Redig on 4/22/19. +// Copyright © 2019 Michael Redig. All rights reserved. +// + +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + func applicationWillResignActive(_ application: UIApplication) { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. + } + + func applicationDidEnterBackground(_ application: UIApplication) { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. + } + + func applicationWillEnterForeground(_ application: UIApplication) { + // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. + } + + func applicationDidBecomeActive(_ application: UIApplication) { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + } + + func applicationWillTerminate(_ application: UIApplication) { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. + } + + +} + diff --git a/Poll/Poll/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json b/Poll/Poll/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..d8db8d6 --- /dev/null +++ b/Poll/Poll/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "83.5x83.5", + "scale" : "2x" + }, + { + "idiom" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Poll/Poll/Resources/Assets.xcassets/Contents.json b/Poll/Poll/Resources/Assets.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/Poll/Poll/Resources/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Poll/Poll/Resources/Info.plist b/Poll/Poll/Resources/Info.plist new file mode 100644 index 0000000..16be3b6 --- /dev/null +++ b/Poll/Poll/Resources/Info.plist @@ -0,0 +1,45 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/Poll/Poll/Resources/colorNames.json b/Poll/Poll/Resources/colorNames.json new file mode 100644 index 0000000..11be180 --- /dev/null +++ b/Poll/Poll/Resources/colorNames.json @@ -0,0 +1 @@ +{"colorsByName":{"flame":{"red":226,"alpha":255,"blue":34,"green":88},"lavenderGray":{"red":196,"alpha":255,"blue":208,"green":195},"cherryBlossomPink":{"red":255,"alpha":255,"blue":197,"green":183},"goldenYellow":{"red":255,"alpha":255,"blue":0,"green":223},"brandeisBlue":{"red":0,"alpha":255,"blue":255,"green":112},"dollarBill":{"red":133,"alpha":255,"blue":101,"green":187},"mantis":{"red":116,"alpha":255,"blue":101,"green":195},"pinkFlamingo":{"red":252,"alpha":255,"blue":253,"green":116},"ivory":{"red":255,"alpha":255,"blue":240,"green":255},"darkPastelBlue":{"red":119,"alpha":255,"blue":203,"green":158},"fireEngineRed":{"red":206,"alpha":255,"blue":41,"green":32},"lightPink":{"red":255,"alpha":255,"blue":193,"green":182},"warmBlack":{"red":0,"alpha":255,"blue":66,"green":66},"deepPeach":{"red":255,"alpha":255,"blue":164,"green":203},"deepMagenta":{"red":204,"alpha":255,"blue":204,"green":0},"cornflowerBlue":{"red":100,"alpha":255,"blue":237,"green":149},"honeyDew":{"red":240,"alpha":255,"blue":240,"green":255},"sunsetOrange":{"red":253,"alpha":255,"blue":83,"green":94},"cgBlue":{"red":0,"alpha":255,"blue":165,"green":122},"silverAlt":{"red":189,"alpha":255,"blue":199,"green":195},"asparagus":{"red":135,"alpha":255,"blue":107,"green":169},"mediumSeaGreen":{"red":60,"alpha":255,"blue":113,"green":179},"moccasin":{"red":255,"alpha":255,"blue":181,"green":228},"roseTaupe":{"red":144,"alpha":255,"blue":93,"green":93},"persianPink":{"red":247,"alpha":255,"blue":190,"green":127},"darkPastelRed":{"red":194,"alpha":255,"blue":34,"green":59},"orangeCSS3":{"red":255,"alpha":255,"blue":0,"green":165},"sienna":{"red":160,"alpha":255,"blue":45,"green":82},"ecru":{"red":194,"alpha":255,"blue":128,"green":178},"almond":{"red":239,"alpha":255,"blue":205,"green":222},"easterPink":{"red":241,"alpha":255,"blue":162,"green":167},"crimsonRed":{"red":153,"alpha":255,"blue":0,"green":0},"darkSlateGray":{"red":47,"alpha":255,"blue":79,"green":79},"slateGray":{"red":112,"alpha":255,"blue":144,"green":128},"darkOrchid":{"red":153,"alpha":255,"blue":204,"green":50},"flax":{"red":238,"alpha":255,"blue":130,"green":220},"anti-flashWhite":{"red":242,"alpha":255,"blue":244,"green":243},"antiqueFuchsia":{"red":145,"alpha":255,"blue":131,"green":92},"persianOrange":{"red":217,"alpha":255,"blue":88,"green":144},"carolinaBlue":{"red":153,"alpha":255,"blue":221,"green":186},"carrot":{"red":230,"alpha":255,"blue":34,"green":126},"violetBlue":{"red":50,"alpha":255,"blue":178,"green":74},"darkKhaki":{"red":189,"alpha":255,"blue":107,"green":183},"turquoiseBlue":{"red":0,"alpha":255,"blue":239,"green":255},"papayaWhip":{"red":255,"alpha":255,"blue":213,"green":239},"cerulean":{"red":0,"alpha":255,"blue":167,"green":123},"deepCarrotOrange":{"red":233,"alpha":255,"blue":44,"green":105},"paleCopper":{"red":218,"alpha":255,"blue":103,"green":138},"redAlt":{"red":244,"alpha":255,"blue":54,"green":67},"lightCream":{"red":240,"alpha":255,"blue":215,"green":238},"outerSpace":{"red":65,"alpha":255,"blue":76,"green":74},"aureolin":{"red":253,"alpha":255,"blue":0,"green":238},"mintCream":{"red":245,"alpha":255,"blue":250,"green":255},"turquoiseGreen":{"red":160,"alpha":255,"blue":180,"green":214},"vividTangerine":{"red":255,"alpha":255,"blue":137,"green":160},"coralRed":{"red":255,"alpha":255,"blue":64,"green":64},"venetianRed":{"red":200,"alpha":255,"blue":21,"green":8},"mediumSpringBud":{"red":201,"alpha":255,"blue":135,"green":220},"bubbles":{"red":231,"alpha":255,"blue":255,"green":254},"fuchsiaPink":{"red":255,"alpha":255,"blue":255,"green":119},"harlequin":{"red":63,"alpha":255,"blue":0,"green":255},"steelBlue":{"red":70,"alpha":255,"blue":180,"green":130},"mauvelous":{"red":239,"alpha":255,"blue":170,"green":152},"paleLavender":{"red":220,"alpha":255,"blue":255,"green":208},"skobeloff":{"red":0,"alpha":255,"blue":116,"green":116},"salmonAlt":{"red":233,"alpha":255,"blue":95,"green":87},"jasmine":{"red":248,"alpha":255,"blue":126,"green":222},"tomato":{"red":255,"alpha":255,"blue":71,"green":99},"lincolnGreen":{"red":25,"alpha":255,"blue":5,"green":89},"floralWhite":{"red":255,"alpha":255,"blue":240,"green":250},"peachPuff":{"red":255,"alpha":255,"blue":185,"green":218},"oldMauve":{"red":103,"alpha":255,"blue":71,"green":49},"navy":{"red":0,"alpha":255,"blue":128,"green":0},"purplePizzazz":{"red":254,"alpha":255,"blue":218,"green":78},"robin'sEggBlue":{"red":31,"alpha":255,"blue":203,"green":206},"khakiAlt":{"red":195,"alpha":255,"blue":145,"green":176},"smokyBlack":{"red":16,"alpha":255,"blue":8,"green":12},"darkGrayCSS3":{"red":169,"alpha":255,"blue":169,"green":169},"coffeeAlt":{"red":141,"alpha":255,"blue":15,"green":60},"brightCyan":{"red":57,"alpha":255,"blue":255,"green":255},"hookerGreen":{"red":73,"alpha":255,"blue":107,"green":121},"pink":{"red":255,"alpha":255,"blue":203,"green":192},"paleGoldenRod":{"red":238,"alpha":255,"blue":170,"green":232},"purpleTaupe":{"red":80,"alpha":255,"blue":77,"green":64},"earthYellow":{"red":225,"alpha":255,"blue":95,"green":169},"coolGrey":{"red":140,"alpha":255,"blue":172,"green":146},"azure":{"red":240,"alpha":255,"blue":255,"green":255},"wave":{"red":102,"alpha":255,"blue":251,"green":169},"hazelnut":{"red":207,"alpha":255,"blue":149,"green":176},"coral":{"red":255,"alpha":255,"blue":80,"green":127},"verdigris":{"red":67,"alpha":255,"blue":174,"green":179},"deepPurple":{"red":103,"alpha":255,"blue":183,"green":58},"meatBrown":{"red":229,"alpha":255,"blue":59,"green":183},"airForceBlue":{"red":93,"alpha":255,"blue":168,"green":138},"islamicGreen":{"red":0,"alpha":255,"blue":0,"green":144},"etonBlue":{"red":150,"alpha":255,"blue":162,"green":200},"mint":{"red":62,"alpha":255,"blue":137,"green":180},"ballBlue":{"red":33,"alpha":255,"blue":205,"green":171},"daffodil":{"red":255,"alpha":255,"blue":49,"green":255},"carmine":{"red":255,"alpha":255,"blue":64,"green":0},"gray":{"red":128,"alpha":255,"blue":128,"green":128},"forestGreen":{"red":34,"alpha":255,"blue":34,"green":139},"paleVioletRed":{"red":216,"alpha":255,"blue":147,"green":112},"caféAuLait":{"red":166,"alpha":255,"blue":91,"green":123},"strongViolet":{"red":64,"alpha":255,"blue":192,"green":5},"cadmiumYellow":{"red":255,"alpha":255,"blue":0,"green":246},"blueBell":{"red":162,"alpha":255,"blue":208,"green":162},"bleuDeFrance":{"red":49,"alpha":255,"blue":231,"green":140},"brass":{"red":181,"alpha":255,"blue":66,"green":166},"electricUltramarine":{"red":63,"alpha":255,"blue":255,"green":0},"lemonChiffon":{"red":255,"alpha":255,"blue":205,"green":250},"roseGold":{"red":183,"alpha":255,"blue":121,"green":110},"mahogany":{"red":192,"alpha":255,"blue":0,"green":64},"babyBlueAlt":{"red":190,"alpha":255,"blue":230,"green":220},"royalFuchsia":{"red":202,"alpha":255,"blue":146,"green":44},"seaShell":{"red":255,"alpha":255,"blue":238,"green":245},"darkTerraCotta":{"red":204,"alpha":255,"blue":92,"green":78},"neonCarrot":{"red":255,"alpha":255,"blue":67,"green":163},"powderBlue":{"red":176,"alpha":255,"blue":230,"green":224},"rossoCorsa":{"red":212,"alpha":255,"blue":0,"green":0},"persianBlue":{"red":28,"alpha":255,"blue":187,"green":57},"carmineRed":{"red":255,"alpha":255,"blue":56,"green":0},"moneyGreen":{"red":134,"alpha":255,"blue":124,"green":198},"azureAlt":{"red":0,"alpha":255,"blue":255,"green":127},"jade":{"red":0,"alpha":255,"blue":107,"green":168},"magicMint":{"red":170,"alpha":255,"blue":209,"green":240},"phthaloBlue":{"red":0,"alpha":255,"blue":137,"green":15},"greenCSS3":{"red":0,"alpha":255,"blue":0,"green":128},"saddleBrown":{"red":139,"alpha":255,"blue":19,"green":69},"lawnGreen":{"red":124,"alpha":255,"blue":0,"green":252},"cantaloupe":{"red":250,"alpha":255,"blue":79,"green":154},"topaz":{"red":255,"alpha":255,"blue":124,"green":200},"persianPlum":{"red":112,"alpha":255,"blue":28,"green":28},"moonstoneBlue":{"red":115,"alpha":255,"blue":194,"green":169},"paleTurquoise":{"red":175,"alpha":255,"blue":238,"green":238},"darkCoral":{"red":205,"alpha":255,"blue":69,"green":91},"deepCarminePink":{"red":239,"alpha":255,"blue":56,"green":48},"darkChestnut":{"red":152,"alpha":255,"blue":96,"green":105},"goldenrod":{"red":215,"alpha":255,"blue":51,"green":170},"harvestGold":{"red":218,"alpha":255,"blue":0,"green":145},"vividBurgundy":{"red":159,"alpha":255,"blue":53,"green":29},"copper":{"red":184,"alpha":255,"blue":51,"green":115},"linen":{"red":250,"alpha":255,"blue":230,"green":240},"spiroDiscoBall":{"red":15,"alpha":255,"blue":252,"green":192},"pastelBrown":{"red":131,"alpha":255,"blue":83,"green":105},"darkSpringGreen":{"red":23,"alpha":255,"blue":69,"green":114},"inchworm":{"red":178,"alpha":255,"blue":93,"green":236},"ube":{"red":136,"alpha":255,"blue":195,"green":120},"bittersweet":{"red":254,"alpha":255,"blue":94,"green":111},"darkBlue":{"red":0,"alpha":255,"blue":139,"green":0},"snow":{"red":255,"alpha":255,"blue":250,"green":250},"paleCornflowerBlue":{"red":171,"alpha":255,"blue":239,"green":205},"uclaGold":{"red":255,"alpha":255,"blue":0,"green":179},"seafoam":{"red":77,"alpha":255,"blue":140,"green":226},"brightPink":{"red":255,"alpha":255,"blue":127,"green":0},"celadon":{"red":172,"alpha":255,"blue":175,"green":225},"glaucous":{"red":96,"alpha":255,"blue":182,"green":130},"alizarinCrimson":{"red":227,"alpha":255,"blue":54,"green":38},"red":{"red":255,"alpha":255,"blue":0,"green":0},"darkGoldenRod":{"red":184,"alpha":255,"blue":11,"green":134},"lightCyan":{"red":224,"alpha":255,"blue":255,"green":255},"mistyRose":{"red":255,"alpha":255,"blue":225,"green":228},"straw":{"red":228,"alpha":255,"blue":111,"green":217},"pearl":{"red":234,"alpha":255,"blue":200,"green":224},"lightCarminePink":{"red":230,"alpha":255,"blue":113,"green":103},"slateBlue":{"red":106,"alpha":255,"blue":205,"green":90},"jonquil":{"red":250,"alpha":255,"blue":94,"green":218},"deepLilac":{"red":153,"alpha":255,"blue":187,"green":85},"wine":{"red":114,"alpha":255,"blue":55,"green":47},"brightLavender":{"red":191,"alpha":255,"blue":228,"green":148},"peachAlt":{"red":242,"alpha":255,"blue":97,"green":187},"apricot":{"red":251,"alpha":255,"blue":177,"green":206},"dandelion":{"red":240,"alpha":255,"blue":48,"green":225},"paleGreenAlt":{"red":176,"alpha":255,"blue":172,"green":226},"indigoAlt":{"red":13,"alpha":255,"blue":139,"green":79},"carnationPink":{"red":255,"alpha":255,"blue":201,"green":166},"goldenBrown":{"red":153,"alpha":255,"blue":21,"green":101},"cerise":{"red":222,"alpha":255,"blue":99,"green":49},"atomicTangerine":{"red":255,"alpha":255,"blue":102,"green":153},"mediumAquamarine":{"red":102,"alpha":255,"blue":170,"green":205},"puce":{"red":204,"alpha":255,"blue":153,"green":136},"belizeHole":{"red":41,"alpha":255,"blue":185,"green":128},"beaver":{"red":159,"alpha":255,"blue":112,"green":129},"darkCandyAppleRed":{"red":164,"alpha":255,"blue":0,"green":0},"icterine":{"red":252,"alpha":255,"blue":94,"green":247},"chamoisee":{"red":160,"alpha":255,"blue":90,"green":120},"pomegranate":{"red":192,"alpha":255,"blue":43,"green":57},"halayàÚbe":{"red":102,"alpha":255,"blue":84,"green":56},"laurelGreen":{"red":169,"alpha":255,"blue":157,"green":186},"ceruleanBlue":{"red":42,"alpha":255,"blue":190,"green":82},"darkSienna":{"red":60,"alpha":255,"blue":20,"green":20},"redOrange":{"red":255,"alpha":255,"blue":73,"green":83},"beige":{"red":245,"alpha":255,"blue":220,"green":245},"royalBlue":{"red":65,"alpha":255,"blue":225,"green":105},"satinSheenGold":{"red":203,"alpha":255,"blue":53,"green":161},"paleSilver":{"red":201,"alpha":255,"blue":187,"green":192},"hanPurple":{"red":82,"alpha":255,"blue":250,"green":24},"pinkSherbet":{"red":247,"alpha":255,"blue":167,"green":143},"lightGoldenRodYellow":{"red":250,"alpha":255,"blue":210,"green":250},"upMaroon":{"red":123,"alpha":255,"blue":19,"green":17},"creamAlt":{"red":240,"alpha":255,"blue":187,"green":226},"lemonLime":{"red":191,"alpha":255,"blue":0,"green":255},"amaranth":{"red":229,"alpha":255,"blue":80,"green":43},"seaGreen":{"red":46,"alpha":255,"blue":87,"green":139},"lilac":{"red":200,"alpha":255,"blue":200,"green":162},"upForestGreen":{"red":1,"alpha":255,"blue":33,"green":68},"rosePink":{"red":255,"alpha":255,"blue":204,"green":102},"ochre":{"red":204,"alpha":255,"blue":34,"green":119},"patriarch":{"red":128,"alpha":255,"blue":128,"green":0},"darkMagenta":{"red":139,"alpha":255,"blue":139,"green":0},"oceanBoatBlue":{"red":0,"alpha":255,"blue":190,"green":119},"white":{"red":255,"alpha":255,"blue":255,"green":255},"mediumSlateBlue":{"red":123,"alpha":255,"blue":238,"green":104},"lightSalmon":{"red":255,"alpha":255,"blue":122,"green":160},"electricYellow":{"red":255,"alpha":255,"blue":0,"green":255},"limeGreen":{"red":50,"alpha":255,"blue":50,"green":205},"hunterGreen":{"red":53,"alpha":255,"blue":59,"green":94},"lavenderBlush":{"red":255,"alpha":255,"blue":245,"green":240},"lemon":{"red":255,"alpha":255,"blue":0,"green":247},"paleRobinEggBlue":{"red":150,"alpha":255,"blue":209,"green":222},"sunglow":{"red":255,"alpha":255,"blue":51,"green":204},"darkTurquoise":{"red":0,"alpha":255,"blue":209,"green":206},"pastelOrangeAlt":{"red":248,"alpha":255,"blue":143,"green":197},"brownCSS3":{"red":165,"alpha":255,"blue":42,"green":42},"zaffre":{"red":0,"alpha":255,"blue":168,"green":20},"mediumVioletRed":{"red":199,"alpha":255,"blue":133,"green":21},"dodgerBlue":{"red":30,"alpha":255,"blue":255,"green":144},"ultramarine":{"red":18,"alpha":255,"blue":143,"green":10},"darkMidnightBlue":{"red":0,"alpha":255,"blue":102,"green":51},"darkElectricBlue":{"red":83,"alpha":255,"blue":120,"green":104},"purpleMountainMajesty":{"red":150,"alpha":255,"blue":182,"green":120},"dartmouthGreen":{"red":0,"alpha":255,"blue":62,"green":105},"coolPurple":{"red":140,"alpha":255,"blue":228,"green":93},"mauveTaupe":{"red":145,"alpha":255,"blue":109,"green":95},"deepJungleGreen":{"red":0,"alpha":255,"blue":73,"green":75},"persianRose":{"red":254,"alpha":255,"blue":162,"green":40},"napierGreen":{"red":42,"alpha":255,"blue":0,"green":128},"lightSteelBlue":{"red":176,"alpha":255,"blue":222,"green":196},"fashionFuchsia":{"red":244,"alpha":255,"blue":161,"green":0},"crimson":{"red":220,"alpha":255,"blue":60,"green":20},"tawny":{"red":205,"alpha":255,"blue":0,"green":87},"mediumTurquoise":{"red":72,"alpha":255,"blue":204,"green":209},"oldLace":{"red":253,"alpha":255,"blue":230,"green":245},"bronze":{"red":205,"alpha":255,"blue":50,"green":127},"lightBlue":{"red":173,"alpha":255,"blue":230,"green":216},"orchid":{"red":218,"alpha":255,"blue":214,"green":112},"peach":{"red":255,"alpha":255,"blue":180,"green":229},"outrageousOrange":{"red":255,"alpha":255,"blue":74,"green":110},"pastelGreen":{"red":119,"alpha":255,"blue":119,"green":221},"trueBlue":{"red":0,"alpha":255,"blue":207,"green":115},"burlyWood":{"red":222,"alpha":255,"blue":135,"green":184},"heliotrope":{"red":223,"alpha":255,"blue":255,"green":115},"orangeRed":{"red":255,"alpha":255,"blue":0,"green":69},"umber":{"red":99,"alpha":255,"blue":71,"green":81},"darkLavender":{"red":115,"alpha":255,"blue":150,"green":79},"navyPeony":{"red":34,"alpha":255,"blue":94,"green":58},"jungleGreen":{"red":41,"alpha":255,"blue":135,"green":171},"deepCerise":{"red":218,"alpha":255,"blue":135,"green":50},"lightPastelPurple":{"red":177,"alpha":255,"blue":217,"green":156},"neonFuchsia":{"red":254,"alpha":255,"blue":194,"green":89},"internationalOrange":{"red":255,"alpha":255,"blue":0,"green":79},"antiqueBrass":{"red":205,"alpha":255,"blue":117,"green":149},"lavenderBlue":{"red":204,"alpha":255,"blue":255,"green":204},"veronica":{"red":160,"alpha":255,"blue":240,"green":32},"grullo":{"red":169,"alpha":255,"blue":134,"green":154},"cornflower":{"red":154,"alpha":255,"blue":235,"green":206},"smokeyTopaz":{"red":147,"alpha":255,"blue":65,"green":61},"fawn":{"red":229,"alpha":255,"blue":112,"green":170},"chartreuse":{"red":127,"alpha":255,"blue":0,"green":255},"mikadoYellow":{"red":255,"alpha":255,"blue":12,"green":196},"babyPink":{"red":244,"alpha":255,"blue":194,"green":194},"blueViolet":{"red":138,"alpha":255,"blue":226,"green":43},"juneBud":{"red":189,"alpha":255,"blue":87,"green":218},"piggyPink":{"red":253,"alpha":255,"blue":230,"green":221},"fieldDrab":{"red":108,"alpha":255,"blue":30,"green":84},"fern":{"red":113,"alpha":255,"blue":120,"green":188},"mediumPersianBlue":{"red":0,"alpha":255,"blue":165,"green":103},"deepCoffee":{"red":112,"alpha":255,"blue":65,"green":66},"majorelleBlue":{"red":96,"alpha":255,"blue":220,"green":80},"hotMagenta":{"red":255,"alpha":255,"blue":206,"green":29},"tangelo":{"red":249,"alpha":255,"blue":0,"green":77},"paleCerulean":{"red":155,"alpha":255,"blue":226,"green":196},"liver":{"red":83,"alpha":255,"blue":79,"green":75},"paleRedViolet":{"red":219,"alpha":255,"blue":147,"green":112},"platinum":{"red":229,"alpha":255,"blue":226,"green":228},"britishRacingGreen":{"red":0,"alpha":255,"blue":37,"green":66},"coquelicot":{"red":255,"alpha":255,"blue":0,"green":56},"cinnamon":{"red":123,"alpha":255,"blue":9,"green":63},"sandyBrown":{"red":244,"alpha":255,"blue":96,"green":164},"fireBrick":{"red":178,"alpha":255,"blue":34,"green":34},"sinopia":{"red":203,"alpha":255,"blue":11,"green":65},"cinereous":{"red":152,"alpha":255,"blue":123,"green":129},"carminePink":{"red":235,"alpha":255,"blue":66,"green":76},"macaroniAndCheese":{"red":255,"alpha":255,"blue":136,"green":189},"vegasGold":{"red":197,"alpha":255,"blue":88,"green":179},"wetAsphalt":{"red":52,"alpha":255,"blue":94,"green":73},"neutralGray":{"red":142,"alpha":255,"blue":143,"green":145},"goldAlt":{"red":139,"alpha":255,"blue":18,"green":117},"pistachio":{"red":147,"alpha":255,"blue":114,"green":197},"mediumTaupe":{"red":103,"alpha":255,"blue":71,"green":76},"royalAzure":{"red":0,"alpha":255,"blue":168,"green":56},"zinnwalditeBrown":{"red":44,"alpha":255,"blue":8,"green":22},"ginger":{"red":176,"alpha":255,"blue":0,"green":101},"canary":{"red":255,"alpha":255,"blue":153,"green":255},"whiteSmoke":{"red":245,"alpha":255,"blue":245,"green":245},"feldgrau":{"red":77,"alpha":255,"blue":83,"green":93},"frenchLilac":{"red":134,"alpha":255,"blue":142,"green":96},"pastelYellow":{"red":253,"alpha":255,"blue":150,"green":253},"cottonCandy":{"red":255,"alpha":255,"blue":217,"green":188},"paleMagenta":{"red":249,"alpha":255,"blue":229,"green":132},"bostonUniversityRed":{"red":204,"alpha":255,"blue":0,"green":0},"desertSand":{"red":237,"alpha":255,"blue":175,"green":201},"chocolate":{"red":210,"alpha":255,"blue":30,"green":105},"darkLava":{"red":72,"alpha":255,"blue":50,"green":60},"warmGray":{"red":133,"alpha":255,"blue":112,"green":117},"iris":{"red":90,"alpha":255,"blue":207,"green":79},"lavenderPink":{"red":251,"alpha":255,"blue":210,"green":174},"psychedelicPurple":{"red":223,"alpha":255,"blue":255,"green":0},"flavescent":{"red":247,"alpha":255,"blue":142,"green":233},"marina":{"red":79,"alpha":255,"blue":196,"green":132},"indianRed":{"red":205,"alpha":255,"blue":92,"green":92},"lapisLazuli":{"red":38,"alpha":255,"blue":156,"green":97},"timberwolf":{"red":219,"alpha":255,"blue":210,"green":215},"midnightGreen":{"red":0,"alpha":255,"blue":83,"green":73},"amethyst":{"red":153,"alpha":255,"blue":204,"green":102},"iceberg":{"red":200,"alpha":255,"blue":219,"green":213},"darkPastelPurple":{"red":150,"alpha":255,"blue":214,"green":111},"blizzardBlue":{"red":172,"alpha":255,"blue":238,"green":229},"lime":{"red":0,"alpha":255,"blue":0,"green":255},"rufous":{"red":168,"alpha":255,"blue":7,"green":28},"razzleDazzleRose":{"red":255,"alpha":255,"blue":204,"green":51},"orangePeel":{"red":255,"alpha":255,"blue":0,"green":159},"tigerEye":{"red":224,"alpha":255,"blue":60,"green":141},"richMaroon":{"red":176,"alpha":255,"blue":96,"green":48},"antiqueWhite":{"red":250,"alpha":255,"blue":215,"green":235},"darkTan":{"red":145,"alpha":255,"blue":81,"green":129},"vividCerise":{"red":218,"alpha":255,"blue":129,"green":29},"classicRose":{"red":251,"alpha":255,"blue":231,"green":204},"deepPukeGreen":{"red":34,"alpha":255,"blue":8,"green":47},"lightApricot":{"red":253,"alpha":255,"blue":177,"green":213},"sacramentoStateGreen":{"red":0,"alpha":255,"blue":63,"green":86},"manatee":{"red":151,"alpha":255,"blue":170,"green":154},"strongLimeGreen":{"red":20,"alpha":255,"blue":0,"green":199},"operaMauve":{"red":183,"alpha":255,"blue":167,"green":132},"palatinateBlue":{"red":39,"alpha":255,"blue":226,"green":59},"sandstorm":{"red":236,"alpha":255,"blue":64,"green":213},"electricLime":{"red":204,"alpha":255,"blue":0,"green":255},"lightBrown":{"red":181,"alpha":255,"blue":29,"green":101},"dogwoodRose":{"red":215,"alpha":255,"blue":104,"green":24},"pansyPurple":{"red":120,"alpha":255,"blue":74,"green":24},"pumpkin":{"red":255,"alpha":255,"blue":24,"green":117},"indigo":{"red":75,"alpha":255,"blue":130,"green":0},"mayaBlue":{"red":115,"alpha":255,"blue":251,"green":194},"darkGreenAlt":{"red":1,"alpha":255,"blue":32,"green":50},"electricViolet":{"red":143,"alpha":255,"blue":255,"green":0},"taupeGray":{"red":139,"alpha":255,"blue":137,"green":133},"ashGrey":{"red":178,"alpha":255,"blue":181,"green":190},"tyrianPurple":{"red":102,"alpha":255,"blue":60,"green":2},"indianYellow":{"red":227,"alpha":255,"blue":87,"green":168},"camouflageGreen":{"red":120,"alpha":255,"blue":107,"green":134},"tractorRed":{"red":253,"alpha":255,"blue":53,"green":14},"alizarin":{"red":231,"alpha":255,"blue":60,"green":76},"russet":{"red":128,"alpha":255,"blue":27,"green":70},"uaRed":{"red":217,"alpha":255,"blue":76,"green":0},"lightFuchsiaPink":{"red":249,"alpha":255,"blue":239,"green":132},"folly":{"red":255,"alpha":255,"blue":79,"green":0},"pinkAlt":{"red":255,"alpha":255,"blue":154,"green":95},"mediumSpringGreen":{"red":0,"alpha":255,"blue":154,"green":250},"aquamarine":{"red":127,"alpha":255,"blue":212,"green":255},"cardinal":{"red":196,"alpha":255,"blue":58,"green":30},"frenchBlue":{"red":0,"alpha":255,"blue":187,"green":114},"fernGreen":{"red":79,"alpha":255,"blue":66,"green":121},"onyx":{"red":15,"alpha":255,"blue":15,"green":15},"kale":{"red":90,"alpha":255,"blue":71,"green":114},"amber":{"red":255,"alpha":255,"blue":0,"green":191},"kellyGreen":{"red":76,"alpha":255,"blue":23,"green":187},"boysenberry":{"red":135,"alpha":255,"blue":96,"green":50},"candyPink":{"red":228,"alpha":255,"blue":122,"green":113},"coralPink":{"red":248,"alpha":255,"blue":121,"green":131},"pastelPink":{"red":255,"alpha":255,"blue":220,"green":209},"tuftsBlue":{"red":65,"alpha":255,"blue":193,"green":125},"mediumRedViolet":{"red":187,"alpha":255,"blue":133,"green":51},"turkishRose":{"red":181,"alpha":255,"blue":129,"green":114},"mustard":{"red":255,"alpha":255,"blue":88,"green":219},"darkBrown":{"red":101,"alpha":255,"blue":33,"green":67},"ultramarineBlue":{"red":65,"alpha":255,"blue":245,"green":102},"mediumAquamarineAlt":{"red":102,"alpha":255,"blue":170,"green":221},"cadmiumRed":{"red":227,"alpha":255,"blue":34,"green":0},"wildWatermelon":{"red":252,"alpha":255,"blue":133,"green":108},"pakistanGreen":{"red":0,"alpha":255,"blue":0,"green":102},"seaBlue":{"red":0,"alpha":255,"blue":148,"green":105},"aurometalsaurus":{"red":110,"alpha":255,"blue":128,"green":127},"persianRed":{"red":204,"alpha":255,"blue":51,"green":51},"blue":{"red":0,"alpha":255,"blue":255,"green":0},"wenge":{"red":100,"alpha":255,"blue":82,"green":84},"copperRose":{"red":153,"alpha":255,"blue":102,"green":102},"purple":{"red":156,"alpha":255,"blue":176,"green":39},"burntOrangeAlt":{"red":184,"alpha":255,"blue":37,"green":102},"burgundy":{"red":128,"alpha":255,"blue":32,"green":0},"olive":{"red":128,"alpha":255,"blue":0,"green":128},"blush":{"red":222,"alpha":255,"blue":131,"green":93},"battleshipGrey":{"red":132,"alpha":255,"blue":130,"green":132},"pastelBlueAlt":{"red":99,"alpha":255,"blue":247,"green":161},"roseBonbon":{"red":249,"alpha":255,"blue":158,"green":66},"darkPowderBlue":{"red":0,"alpha":255,"blue":153,"green":51},"midnightBlueAlt":{"red":13,"alpha":255,"blue":35,"green":26},"nightSkyBlue":{"red":38,"alpha":255,"blue":57,"green":37},"calPolyPomonaGreen":{"red":30,"alpha":255,"blue":43,"green":77},"orange":{"red":243,"alpha":255,"blue":18,"green":156},"lightGrayCSS3":{"red":211,"alpha":255,"blue":211,"green":211},"banana":{"red":229,"alpha":255,"blue":58,"green":227},"darkByzantium":{"red":93,"alpha":255,"blue":84,"green":57},"pinkPearl":{"red":231,"alpha":255,"blue":207,"green":172},"darkSlateBlue":{"red":72,"alpha":255,"blue":139,"green":61},"pastelGray":{"red":207,"alpha":255,"blue":196,"green":207},"fulvous":{"red":228,"alpha":255,"blue":0,"green":132},"candyAppleRed":{"red":255,"alpha":255,"blue":0,"green":8},"steelBlueAlt":{"red":103,"alpha":255,"blue":170,"green":153},"tealAlt":{"red":28,"alpha":255,"blue":170,"green":160},"buff":{"red":240,"alpha":255,"blue":130,"green":220},"blueAlt":{"red":33,"alpha":255,"blue":243,"green":150},"pear":{"red":209,"alpha":255,"blue":49,"green":226},"steel":{"red":96,"alpha":255,"blue":139,"green":125},"grapefruit":{"red":228,"alpha":255,"blue":54,"green":31},"androidGreen":{"red":164,"alpha":255,"blue":57,"green":198},"strawberry":{"red":190,"alpha":255,"blue":37,"green":38},"pastelPurple":{"red":179,"alpha":255,"blue":181,"green":158},"mediumElectricBlue":{"red":3,"alpha":255,"blue":150,"green":80},"flamingoPink":{"red":252,"alpha":255,"blue":172,"green":142},"lightCoral":{"red":240,"alpha":255,"blue":128,"green":128},"lightSkyBlue":{"red":135,"alpha":255,"blue":250,"green":206},"balletSlipper":{"red":235,"alpha":255,"blue":213,"green":206},"richCarmine":{"red":215,"alpha":255,"blue":64,"green":0},"wildBlueYonder":{"red":162,"alpha":255,"blue":208,"green":173},"dukeBlue":{"red":0,"alpha":255,"blue":156,"green":0},"turquoise":{"red":64,"alpha":255,"blue":208,"green":224},"palatinatePurple":{"red":104,"alpha":255,"blue":96,"green":40},"brickRed":{"red":203,"alpha":255,"blue":84,"green":65},"bananaMania":{"red":250,"alpha":255,"blue":181,"green":231},"lavenderIndigo":{"red":148,"alpha":255,"blue":235,"green":87},"dimGray":{"red":105,"alpha":255,"blue":105,"green":105},"darkViolet":{"red":148,"alpha":255,"blue":211,"green":0},"shamrockGreen":{"red":0,"alpha":255,"blue":96,"green":158},"deepOrange":{"red":255,"alpha":255,"blue":34,"green":87},"peridot":{"red":230,"alpha":255,"blue":0,"green":226},"goldenPoppy":{"red":252,"alpha":255,"blue":0,"green":194},"black":{"red":0,"alpha":255,"blue":0,"green":0},"unmellowYellow":{"red":255,"alpha":255,"blue":102,"green":255},"darkRed":{"red":139,"alpha":255,"blue":0,"green":0},"pacificBlue":{"red":28,"alpha":255,"blue":201,"green":169},"silver":{"red":192,"alpha":255,"blue":192,"green":192},"urobilin":{"red":225,"alpha":255,"blue":33,"green":173},"mediumBlue":{"red":0,"alpha":255,"blue":205,"green":0},"robinEgg":{"red":141,"alpha":255,"blue":247,"green":218},"siennaAlt":{"red":136,"alpha":255,"blue":23,"green":45},"maroonAlt":{"red":80,"alpha":255,"blue":28,"green":4},"teaGreen":{"red":208,"alpha":255,"blue":192,"green":240},"honeydew":{"red":216,"alpha":255,"blue":231,"green":255},"faluRed":{"red":128,"alpha":255,"blue":24,"green":24},"champagne":{"red":250,"alpha":255,"blue":165,"green":214},"mandarin":{"red":247,"alpha":255,"blue":55,"green":145},"teal":{"red":0,"alpha":255,"blue":128,"green":128},"electricIndigo":{"red":111,"alpha":255,"blue":255,"green":0},"royalPurple":{"red":120,"alpha":255,"blue":169,"green":81},"hollyGreen":{"red":32,"alpha":255,"blue":14,"green":87},"bottleGreen":{"red":0,"alpha":255,"blue":78,"green":106},"amberAlt":{"red":255,"alpha":255,"blue":7,"green":193},"mangoTango":{"red":255,"alpha":255,"blue":67,"green":130},"roseQuartz":{"red":170,"alpha":255,"blue":169,"green":152},"yellowGreen":{"red":154,"alpha":255,"blue":50,"green":205},"periwinkle":{"red":135,"alpha":255,"blue":237,"green":159},"shadedSpruce":{"red":0,"alpha":255,"blue":94,"green":88},"glitter":{"red":230,"alpha":255,"blue":250,"green":232},"brightMaroon":{"red":195,"alpha":255,"blue":72,"green":33},"blueGreen":{"red":13,"alpha":255,"blue":186,"green":152},"mediumJungleGreen":{"red":28,"alpha":255,"blue":45,"green":53},"turquoiseAlt":{"red":112,"alpha":255,"blue":219,"green":219},"darkCerulean":{"red":8,"alpha":255,"blue":126,"green":69},"razzmatazz":{"red":227,"alpha":255,"blue":107,"green":37},"fuchsia":{"red":255,"alpha":255,"blue":255,"green":0},"vividViolet":{"red":159,"alpha":255,"blue":255,"green":0},"lightYellowAlt":{"red":255,"alpha":255,"blue":237,"green":255},"amethystAlt":{"red":155,"alpha":255,"blue":182,"green":89},"blueberry":{"red":89,"alpha":255,"blue":173,"green":113},"cerisePink":{"red":236,"alpha":255,"blue":131,"green":59},"cobalt":{"red":0,"alpha":255,"blue":171,"green":71},"awesome":{"red":255,"alpha":255,"blue":82,"green":32},"electricCrimson":{"red":255,"alpha":255,"blue":63,"green":0},"tuscanRed":{"red":102,"alpha":255,"blue":77,"green":66},"unitedNationsBlue":{"red":91,"alpha":255,"blue":229,"green":146},"melon":{"red":253,"alpha":255,"blue":180,"green":188},"skyBlue":{"red":135,"alpha":255,"blue":235,"green":206},"deepSkyBlue":{"red":0,"alpha":255,"blue":255,"green":191},"carrotOrange":{"red":237,"alpha":255,"blue":33,"green":145},"persianIndigo":{"red":50,"alpha":255,"blue":122,"green":18},"cadmiumOrange":{"red":237,"alpha":255,"blue":45,"green":135},"darkSalmon":{"red":233,"alpha":255,"blue":122,"green":150},"mountainMeadow":{"red":48,"alpha":255,"blue":143,"green":186},"bondiBlue":{"red":0,"alpha":255,"blue":182,"green":149},"fadedBlue":{"red":23,"alpha":255,"blue":155,"green":137},"uclaBlue":{"red":83,"alpha":255,"blue":149,"green":104},"gainsboro":{"red":220,"alpha":255,"blue":220,"green":220},"olivine":{"red":154,"alpha":255,"blue":115,"green":185},"mediumTealBlue":{"red":0,"alpha":255,"blue":180,"green":84},"schoolBusYellow":{"red":255,"alpha":255,"blue":0,"green":216},"mossGreen":{"red":173,"alpha":255,"blue":173,"green":223},"chartreuseAlt":{"red":69,"alpha":255,"blue":0,"green":139},"rosyBrown":{"red":188,"alpha":255,"blue":143,"green":143},"tealBlue":{"red":54,"alpha":255,"blue":136,"green":117},"blanchedAlmond":{"red":255,"alpha":255,"blue":205,"green":235},"lightYellow":{"red":255,"alpha":255,"blue":224,"green":255},"burntSienna":{"red":233,"alpha":255,"blue":81,"green":116},"lavenderRose":{"red":251,"alpha":255,"blue":227,"green":160},"greenBlue":{"red":17,"alpha":255,"blue":180,"green":100},"lightTaupe":{"red":179,"alpha":255,"blue":109,"green":139},"ghostWhite":{"red":248,"alpha":255,"blue":255,"green":248},"shamrock":{"red":69,"alpha":255,"blue":162,"green":206},"babyBlue":{"red":137,"alpha":255,"blue":240,"green":207},"cyan":{"red":0,"alpha":255,"blue":212,"green":188},"cadmiumGreen":{"red":0,"alpha":255,"blue":60,"green":107},"appleGreen":{"red":141,"alpha":255,"blue":0,"green":182},"paleBrown":{"red":152,"alpha":255,"blue":84,"green":118},"concentrate":{"red":149,"alpha":255,"blue":166,"green":165},"pastelGreenAlt":{"red":126,"alpha":255,"blue":124,"green":242},"darkTangerine":{"red":255,"alpha":255,"blue":18,"green":168},"fuzzyWuzzy":{"red":204,"alpha":255,"blue":102,"green":102},"tawnyPort":{"red":92,"alpha":255,"blue":53,"green":44},"lightGreenAlt":{"red":139,"alpha":255,"blue":74,"green":195},"buttermilk":{"red":254,"alpha":255,"blue":181,"green":241},"bulgarianRose":{"red":72,"alpha":255,"blue":7,"green":6},"peru":{"red":205,"alpha":255,"blue":63,"green":133},"burntUmber":{"red":138,"alpha":255,"blue":36,"green":51},"xanadu":{"red":115,"alpha":255,"blue":120,"green":134},"brightGreen":{"red":102,"alpha":255,"blue":0,"green":255},"beauBlue":{"red":188,"alpha":255,"blue":230,"green":212},"mud":{"red":70,"alpha":255,"blue":29,"green":45},"electricBlue":{"red":125,"alpha":255,"blue":255,"green":249},"nadeshikoPink":{"red":246,"alpha":255,"blue":198,"green":173},"oldLavender":{"red":121,"alpha":255,"blue":120,"green":104},"dust":{"red":236,"alpha":255,"blue":197,"green":214},"bazaar":{"red":152,"alpha":255,"blue":123,"green":119},"shadow":{"red":138,"alpha":255,"blue":93,"green":121},"plumAlt":{"red":139,"alpha":255,"blue":139,"green":102},"upsdellRed":{"red":174,"alpha":255,"blue":41,"green":32},"darkPastelGreen":{"red":3,"alpha":255,"blue":60,"green":192},"bananaYellow":{"red":255,"alpha":255,"blue":53,"green":225},"davyGrey":{"red":85,"alpha":255,"blue":85,"green":85},"tumbleweed":{"red":222,"alpha":255,"blue":136,"green":170},"bole":{"red":121,"alpha":255,"blue":59,"green":68},"grenadine":{"red":223,"alpha":255,"blue":50,"green":63},"safetyOrange":{"red":255,"alpha":255,"blue":0,"green":103},"violet":{"red":238,"alpha":255,"blue":238,"green":130},"portlandOrange":{"red":255,"alpha":255,"blue":54,"green":90},"cambridgeBlue":{"red":163,"alpha":255,"blue":173,"green":193},"lightMagenta":{"red":225,"alpha":255,"blue":255,"green":53},"pastelBlue":{"red":174,"alpha":255,"blue":207,"green":198},"paleTaupe":{"red":188,"alpha":255,"blue":126,"green":152},"lavenderAlt":{"red":204,"alpha":255,"blue":204,"green":153},"hotPink":{"red":255,"alpha":255,"blue":180,"green":105},"ruddyBrown":{"red":187,"alpha":255,"blue":40,"green":101},"scarlet":{"red":255,"alpha":255,"blue":0,"green":36},"brilliantRose":{"red":255,"alpha":255,"blue":163,"green":85},"ferrariRed":{"red":255,"alpha":255,"blue":0,"green":40},"lightThulianPink":{"red":230,"alpha":255,"blue":172,"green":143},"crimsonAlt":{"red":187,"alpha":255,"blue":36,"green":18},"mountbattenPink":{"red":153,"alpha":255,"blue":141,"green":122},"tropicalRainForest":{"red":0,"alpha":255,"blue":94,"green":117},"lightSalmonPink":{"red":255,"alpha":255,"blue":153,"green":153},"caribbeanGreen":{"red":0,"alpha":255,"blue":153,"green":204},"yellowOrange":{"red":255,"alpha":255,"blue":66,"green":174},"chromeYellow":{"red":255,"alpha":255,"blue":0,"green":167},"lightCornflowerBlue":{"red":147,"alpha":255,"blue":234,"green":204},"peachYellow":{"red":250,"alpha":255,"blue":173,"green":223},"darkCyan":{"red":0,"alpha":255,"blue":139,"green":139},"orangeYellow":{"red":248,"alpha":255,"blue":104,"green":213},"lightGreen":{"red":144,"alpha":255,"blue":144,"green":238},"raspberryPink":{"red":226,"alpha":255,"blue":152,"green":80},"richBlack":{"red":0,"alpha":255,"blue":64,"green":64},"sand":{"red":222,"alpha":255,"blue":151,"green":182},"crimsonGlory":{"red":190,"alpha":255,"blue":50,"green":0},"brickRedAlt":{"red":151,"alpha":255,"blue":16,"green":27},"cosmicLatte":{"red":255,"alpha":255,"blue":231,"green":248},"pumpkinAlt":{"red":211,"alpha":255,"blue":0,"green":84},"malachite":{"red":11,"alpha":255,"blue":81,"green":218},"languidLavender":{"red":214,"alpha":255,"blue":221,"green":202},"blond":{"red":250,"alpha":255,"blue":190,"green":240},"oliveGreen":{"red":186,"alpha":255,"blue":108,"green":184},"violetRed":{"red":247,"alpha":255,"blue":148,"green":83},"denimAlt":{"red":67,"alpha":255,"blue":170,"green":114},"wisteria":{"red":201,"alpha":255,"blue":220,"green":160},"pineGreen":{"red":1,"alpha":255,"blue":111,"green":121},"pastelRed":{"red":255,"alpha":255,"blue":97,"green":105},"darkOrange":{"red":255,"alpha":255,"blue":0,"green":140},"byzantine":{"red":189,"alpha":255,"blue":164,"green":51},"chocolateAlt":{"red":94,"alpha":255,"blue":5,"green":38},"maroon":{"red":128,"alpha":255,"blue":0,"green":0},"lapis":{"red":0,"alpha":255,"blue":141,"green":75},"niagara":{"red":84,"alpha":255,"blue":164,"green":135},"isabelline":{"red":244,"alpha":255,"blue":236,"green":240},"cornSilk":{"red":255,"alpha":255,"blue":220,"green":248},"richElectricBlue":{"red":8,"alpha":255,"blue":208,"green":146},"navajoWhite":{"red":255,"alpha":255,"blue":173,"green":222},"byzantium":{"red":112,"alpha":255,"blue":99,"green":41},"mediumPurple":{"red":147,"alpha":255,"blue":216,"green":112},"ufoGreen":{"red":60,"alpha":255,"blue":112,"green":208},"citrine":{"red":228,"alpha":255,"blue":10,"green":208},"violetAlt":{"red":191,"alpha":255,"blue":255,"green":95},"sunflower":{"red":241,"alpha":255,"blue":15,"green":196},"non-photoBlue":{"red":164,"alpha":255,"blue":237,"green":221},"bone":{"red":227,"alpha":255,"blue":201,"green":218},"coolBlack":{"red":0,"alpha":255,"blue":99,"green":46},"northTexasGreen":{"red":5,"alpha":255,"blue":51,"green":144},"utahCrimson":{"red":211,"alpha":255,"blue":63,"green":0},"tangerine":{"red":242,"alpha":255,"blue":0,"green":133},"burntOrange":{"red":204,"alpha":255,"blue":0,"green":85},"tiffanyBlue":{"red":10,"alpha":255,"blue":181,"green":186},"salmon":{"red":250,"alpha":255,"blue":114,"green":128},"emerald":{"red":80,"alpha":255,"blue":120,"green":200},"watermelon":{"red":242,"alpha":255,"blue":63,"green":71},"saffron":{"red":244,"alpha":255,"blue":48,"green":196},"richLilac":{"red":182,"alpha":255,"blue":210,"green":102},"pastelViolet":{"red":203,"alpha":255,"blue":201,"green":153},"ruddy":{"red":255,"alpha":255,"blue":40,"green":0},"yellow":{"red":255,"alpha":255,"blue":59,"green":235},"goldenLime":{"red":154,"alpha":255,"blue":56,"green":151},"coolGray":{"red":118,"alpha":255,"blue":133,"green":122},"laSalleGreen":{"red":8,"alpha":255,"blue":48,"green":120},"sapGreen":{"red":80,"alpha":255,"blue":42,"green":125},"pastelMagenta":{"red":244,"alpha":255,"blue":194,"green":154},"nephritis":{"red":39,"alpha":255,"blue":96,"green":174},"wisteriaAlt":{"red":142,"alpha":255,"blue":173,"green":68},"mediumCandyAppleRed":{"red":226,"alpha":255,"blue":44,"green":6},"aqua":{"red":0,"alpha":255,"blue":255,"green":255},"internationalKleinBlue":{"red":0,"alpha":255,"blue":167,"green":47},"kuCrimson":{"red":232,"alpha":255,"blue":13,"green":0},"prussianBlue":{"red":0,"alpha":255,"blue":83,"green":49},"gold":{"red":255,"alpha":255,"blue":0,"green":215},"paleGold":{"red":230,"alpha":255,"blue":138,"green":190},"eggplant":{"red":97,"alpha":255,"blue":81,"green":64},"roseEbony":{"red":103,"alpha":255,"blue":70,"green":72},"celeste":{"red":178,"alpha":255,"blue":255,"green":255},"salmonPink":{"red":255,"alpha":255,"blue":164,"green":145},"aliceBlue":{"red":240,"alpha":255,"blue":255,"green":248},"ultraPink":{"red":255,"alpha":255,"blue":255,"green":111},"terraCotta":{"red":226,"alpha":255,"blue":91,"green":114},"vividAuburn":{"red":146,"alpha":255,"blue":36,"green":39},"tangerineYellow":{"red":255,"alpha":255,"blue":0,"green":204},"tealGreen":{"red":0,"alpha":255,"blue":91,"green":109},"clouds":{"red":236,"alpha":255,"blue":241,"green":240},"almondAlt":{"red":196,"alpha":255,"blue":72,"green":142},"camel":{"red":193,"alpha":255,"blue":107,"green":154},"coffee":{"red":111,"alpha":255,"blue":55,"green":78},"princetonOrange":{"red":255,"alpha":255,"blue":0,"green":143},"pastelOrange":{"red":255,"alpha":255,"blue":71,"green":179},"blueGray":{"red":102,"alpha":255,"blue":204,"green":153},"screaminGreen":{"red":118,"alpha":255,"blue":122,"green":255},"autumnMaple":{"red":196,"alpha":255,"blue":21,"green":98},"caputMortuum":{"red":89,"alpha":255,"blue":32,"green":39},"lava":{"red":207,"alpha":255,"blue":32,"green":16},"deepCarmine":{"red":169,"alpha":255,"blue":62,"green":32},"springGreen":{"red":0,"alpha":255,"blue":127,"green":255},"grape":{"red":54,"alpha":255,"blue":88,"green":11},"mediumOrchid":{"red":186,"alpha":255,"blue":211,"green":85},"cream":{"red":255,"alpha":255,"blue":208,"green":253},"grannySmithApple":{"red":168,"alpha":255,"blue":160,"green":228},"rosewood":{"red":101,"alpha":255,"blue":11,"green":0},"phthaloGreen":{"red":18,"alpha":255,"blue":36,"green":53},"charcoal":{"red":54,"alpha":255,"blue":79,"green":69},"oldRose":{"red":192,"alpha":255,"blue":129,"green":128},"raspberry":{"red":227,"alpha":255,"blue":93,"green":11},"mordantRed19":{"red":174,"alpha":255,"blue":0,"green":12},"drab":{"red":150,"alpha":255,"blue":23,"green":113},"goldenRod":{"red":218,"alpha":255,"blue":32,"green":165},"darkGreen":{"red":0,"alpha":255,"blue":0,"green":100},"greenYellow":{"red":173,"alpha":255,"blue":47,"green":255},"uaBlue":{"red":0,"alpha":255,"blue":170,"green":51},"khaki":{"red":240,"alpha":255,"blue":140,"green":230},"jasper":{"red":215,"alpha":255,"blue":62,"green":59},"yaleBlue":{"red":15,"alpha":255,"blue":146,"green":77},"saintPatrickBlue":{"red":35,"alpha":255,"blue":122,"green":41},"radicalRed":{"red":255,"alpha":255,"blue":94,"green":53},"mediumCarmine":{"red":175,"alpha":255,"blue":53,"green":64},"cadetGrey":{"red":145,"alpha":255,"blue":176,"green":163},"toolbox":{"red":116,"alpha":255,"blue":192,"green":108},"indiaGreen":{"red":19,"alpha":255,"blue":8,"green":136},"lightSeaGreen":{"red":32,"alpha":255,"blue":170,"green":178},"cadet":{"red":83,"alpha":255,"blue":114,"green":104},"darkRaspberry":{"red":135,"alpha":255,"blue":87,"green":38},"myrtle":{"red":33,"alpha":255,"blue":30,"green":66},"thulianPink":{"red":222,"alpha":255,"blue":161,"green":111},"grass":{"red":99,"alpha":255,"blue":74,"green":214},"harvardCrimson":{"red":201,"alpha":255,"blue":22,"green":0},"charcoalAlt":{"red":34,"alpha":255,"blue":34,"green":34},"magnolia":{"red":248,"alpha":255,"blue":255,"green":244},"twilightLavender":{"red":138,"alpha":255,"blue":107,"green":73},"armyGreen":{"red":75,"alpha":255,"blue":32,"green":83},"eggshellAlt":{"red":252,"alpha":255,"blue":201,"green":230},"selectiveYellow":{"red":255,"alpha":255,"blue":0,"green":186},"lust":{"red":230,"alpha":255,"blue":32,"green":32},"emeraldAlt":{"red":1,"alpha":255,"blue":117,"green":152},"yellowGreenAlt":{"red":192,"alpha":255,"blue":39,"green":242},"mulberry":{"red":197,"alpha":255,"blue":140,"green":75},"cinnabar":{"red":227,"alpha":255,"blue":52,"green":66},"bubbleGum":{"red":255,"alpha":255,"blue":204,"green":193},"mauve":{"red":224,"alpha":255,"blue":255,"green":176},"rawSienna":{"red":214,"alpha":255,"blue":89,"green":138},"sealBrown":{"red":50,"alpha":255,"blue":20,"green":20},"debianRed":{"red":215,"alpha":255,"blue":83,"green":10},"laserLemon":{"red":254,"alpha":255,"blue":34,"green":254},"burntSiennaAlt":{"red":138,"alpha":255,"blue":15,"green":54},"mediumChampagne":{"red":243,"alpha":255,"blue":171,"green":229},"rifleGreen":{"red":65,"alpha":255,"blue":51,"green":72},"eggshell":{"red":240,"alpha":255,"blue":214,"green":234},"brilliantLavender":{"red":244,"alpha":255,"blue":255,"green":187},"oliveAlt":{"red":91,"alpha":255,"blue":34,"green":114},"viridian":{"red":64,"alpha":255,"blue":109,"green":130},"darkJungleGreen":{"red":26,"alpha":255,"blue":33,"green":36},"brightUbe":{"red":209,"alpha":255,"blue":232,"green":159},"palePurple":{"red":229,"alpha":255,"blue":235,"green":180},"raspberryRose":{"red":179,"alpha":255,"blue":108,"green":68},"tickleMePink":{"red":252,"alpha":255,"blue":172,"green":137},"shockingPink":{"red":252,"alpha":255,"blue":192,"green":15},"celestialBlue":{"red":73,"alpha":255,"blue":208,"green":151},"tan":{"red":210,"alpha":255,"blue":140,"green":180},"plum":{"red":221,"alpha":255,"blue":221,"green":160},"caféNoir":{"red":75,"alpha":255,"blue":33,"green":54},"eggplantAlt":{"red":105,"alpha":255,"blue":98,"green":5},"roseVale":{"red":171,"alpha":255,"blue":82,"green":78},"skyMagenta":{"red":207,"alpha":255,"blue":175,"green":113},"deepFuchsia":{"red":193,"alpha":255,"blue":193,"green":84},"darkPink":{"red":231,"alpha":255,"blue":128,"green":84},"palePink":{"red":250,"alpha":255,"blue":221,"green":218},"cactusGreen":{"red":99,"alpha":255,"blue":87,"green":111},"brown":{"red":121,"alpha":255,"blue":72,"green":85},"pearlAqua":{"red":136,"alpha":255,"blue":192,"green":216},"hanBlue":{"red":68,"alpha":255,"blue":207,"green":108},"babyBlueEyes":{"red":161,"alpha":255,"blue":241,"green":202},"lightSlateGray":{"red":119,"alpha":255,"blue":153,"green":136},"sepia":{"red":112,"alpha":255,"blue":20,"green":66},"egyptianBlue":{"red":16,"alpha":255,"blue":166,"green":52},"darkScarlet":{"red":86,"alpha":255,"blue":25,"green":3},"cordovan":{"red":137,"alpha":255,"blue":69,"green":63},"columbiaBlue":{"red":155,"alpha":255,"blue":255,"green":221},"bistre":{"red":61,"alpha":255,"blue":31,"green":43},"arylideYellow":{"red":233,"alpha":255,"blue":107,"green":214},"fandango":{"red":181,"alpha":255,"blue":137,"green":51},"cadetBlue":{"red":95,"alpha":255,"blue":160,"green":158},"sapphire":{"red":15,"alpha":255,"blue":186,"green":82},"paleSpringBud":{"red":236,"alpha":255,"blue":189,"green":235},"mustardAlt":{"red":205,"alpha":255,"blue":45,"green":171},"cardTable":{"red":87,"alpha":255,"blue":107,"green":121},"limeAlt":{"red":56,"alpha":255,"blue":56,"green":237},"bisque":{"red":255,"alpha":255,"blue":196,"green":228},"wildStrawberry":{"red":255,"alpha":255,"blue":164,"green":67},"jazzberryJam":{"red":165,"alpha":255,"blue":94,"green":11},"deepSaffron":{"red":255,"alpha":255,"blue":51,"green":153},"darkOliveGreen":{"red":85,"alpha":255,"blue":47,"green":107},"deepChestnut":{"red":185,"alpha":255,"blue":72,"green":78},"brinkPink":{"red":251,"alpha":255,"blue":127,"green":96},"ruby":{"red":224,"alpha":255,"blue":95,"green":17},"darkSeaGreen":{"red":143,"alpha":255,"blue":143,"green":188},"lavenderPurple":{"red":150,"alpha":255,"blue":182,"green":123},"skyBlueAlt":{"red":0,"alpha":255,"blue":238,"green":178},"oldGold":{"red":207,"alpha":255,"blue":59,"green":181},"lightCrimson":{"red":245,"alpha":255,"blue":145,"green":105},"paleChestnut":{"red":221,"alpha":255,"blue":175,"green":173},"oliveDrab":{"red":107,"alpha":255,"blue":35,"green":142},"ruddyPink":{"red":225,"alpha":255,"blue":150,"green":142},"midnightBlue":{"red":25,"alpha":255,"blue":112,"green":25},"springBud":{"red":167,"alpha":255,"blue":0,"green":252},"neonGreen":{"red":57,"alpha":255,"blue":20,"green":255},"paleDogwood":{"red":239,"alpha":255,"blue":198,"green":209},"electricPurple":{"red":191,"alpha":255,"blue":255,"green":0},"msuGreen":{"red":24,"alpha":255,"blue":59,"green":69},"brightCerulean":{"red":29,"alpha":255,"blue":214,"green":172},"wheat":{"red":245,"alpha":255,"blue":179,"green":222},"mintGreen":{"red":152,"alpha":255,"blue":152,"green":255},"brightTurquoise":{"red":8,"alpha":255,"blue":222,"green":232},"chiliPowder":{"red":199,"alpha":255,"blue":23,"green":63},"titaniumYellow":{"red":238,"alpha":255,"blue":0,"green":230},"deepPink":{"red":255,"alpha":255,"blue":147,"green":20},"paleGreen":{"red":152,"alpha":255,"blue":152,"green":251},"butterum":{"red":198,"alpha":255,"blue":101,"green":143},"lemonYellow":{"red":255,"alpha":255,"blue":79,"green":244},"thistle":{"red":216,"alpha":255,"blue":216,"green":191},"universityOfCaliforniaGold":{"red":183,"alpha":255,"blue":39,"green":135},"oxfordBlue":{"red":0,"alpha":255,"blue":71,"green":33},"denim":{"red":21,"alpha":255,"blue":189,"green":96},"canaryYellow":{"red":255,"alpha":255,"blue":0,"green":239},"cgRed":{"red":224,"alpha":255,"blue":49,"green":60},"americanRose":{"red":255,"alpha":255,"blue":62,"green":3},"mediumPurpleAlt":{"red":147,"alpha":255,"blue":219,"green":112},"carnelian":{"red":179,"alpha":255,"blue":27,"green":27},"gamboge":{"red":228,"alpha":255,"blue":15,"green":155},"rust":{"red":183,"alpha":255,"blue":14,"green":65},"purpleHeart":{"red":105,"alpha":255,"blue":156,"green":53},"pastelPurpleAlt":{"red":207,"alpha":255,"blue":235,"green":100},"corn":{"red":251,"alpha":255,"blue":93,"green":236},"grayAsparagus":{"red":70,"alpha":255,"blue":69,"green":89},"lavender":{"red":230,"alpha":255,"blue":250,"green":230},"frenchRose":{"red":246,"alpha":255,"blue":138,"green":74}}} diff --git a/Poll/Poll/Storyboards/Base.lproj/LaunchScreen.storyboard b/Poll/Poll/Storyboards/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..bfa3612 --- /dev/null +++ b/Poll/Poll/Storyboards/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Poll/Poll/Storyboards/Base.lproj/Main.storyboard b/Poll/Poll/Storyboards/Base.lproj/Main.storyboard new file mode 100644 index 0000000..78357f8 --- /dev/null +++ b/Poll/Poll/Storyboards/Base.lproj/Main.storyboard @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Poll/Poll/Storyboards/Voting.storyboard b/Poll/Poll/Storyboards/Voting.storyboard new file mode 100644 index 0000000..1897dd4 --- /dev/null +++ b/Poll/Poll/Storyboards/Voting.storyboard @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Poll/Poll/View Controllers/VotingViewController.swift b/Poll/Poll/View Controllers/VotingViewController.swift new file mode 100644 index 0000000..62a7001 --- /dev/null +++ b/Poll/Poll/View Controllers/VotingViewController.swift @@ -0,0 +1,36 @@ +// +// VotingViewController.swift +// Poll +// +// Created by Michael Redig on 4/22/19. +// Copyright © 2019 Michael Redig. All rights reserved. +// + +import UIKit + +class VotingViewController: UIViewController { + + @IBOutlet var nameLabel: UITextField! + @IBOutlet var responseLabel: UITextField! + + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + } + + @IBAction func submitButtonPressed(_ sender: UIButton) { + } + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destination. + // Pass the selected object to the new view controller. + } + */ + +} diff --git a/Poll/Poll/Vote.swift b/Poll/Poll/Vote.swift new file mode 100644 index 0000000..534c647 --- /dev/null +++ b/Poll/Poll/Vote.swift @@ -0,0 +1,20 @@ +// +// Vote.swift +// Poll +// +// Created by Michael Redig on 4/22/19. +// Copyright © 2019 Michael Redig. All rights reserved. +// + +import Foundation + +// the instructions technically say "class", but I think struct is more appropriate. +struct Vote { + let name: String + let response: String + + init(name: String, response: String) { + self.name = name + self.response = response + } +} diff --git a/Poll/Poll/VoteController.swift b/Poll/Poll/VoteController.swift new file mode 100644 index 0000000..e8bb14c --- /dev/null +++ b/Poll/Poll/VoteController.swift @@ -0,0 +1,22 @@ +// +// VoteController.swift +// Poll +// +// Created by Michael Redig on 4/22/19. +// Copyright © 2019 Michael Redig. All rights reserved. +// + +import Foundation + +class VoteController { + + var votes = [Vote]() + var voters = Set() + + func createNewVote(with name: String, andResponse response: String) { + if !voters.contains(name) { // each person can only vote once! + votes.append(Vote(name: name, response: response)) + voters.insert(name) + } + } +} diff --git a/Poll/PollTests/Info.plist b/Poll/PollTests/Info.plist new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ b/Poll/PollTests/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/Poll/PollTests/PollTests.swift b/Poll/PollTests/PollTests.swift new file mode 100644 index 0000000..3dfdfa8 --- /dev/null +++ b/Poll/PollTests/PollTests.swift @@ -0,0 +1,34 @@ +// +// PollTests.swift +// PollTests +// +// Created by Michael Redig on 4/22/19. +// Copyright © 2019 Michael Redig. All rights reserved. +// + +import XCTest +@testable import Poll + +class PollTests: XCTestCase { + + override func setUp() { + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testExample() { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testPerformanceExample() { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + +} From 49671eaad4114c9b92c6a53def089dbd51951086 Mon Sep 17 00:00:00 2001 From: Michael Redig Date: Mon, 22 Apr 2019 18:14:17 -0500 Subject: [PATCH 2/7] basic project finish apart from tab view buttons --- Poll/Poll.xcodeproj/project.pbxproj | 24 ++++++ .../UserInterfaceState.xcuserstate | Bin 18632 -> 31776 bytes .../Storyboards/Base.lproj/Main.storyboard | 61 ++++++++++++---- Poll/Poll/Storyboards/Combined.storyboard | 69 ++++++++++++++++++ Poll/Poll/Storyboards/Results.storyboard | 57 +++++++++++++++ Poll/Poll/Storyboards/Voting.storyboard | 2 +- .../CombinedViewController.swift | 34 +++++++++ .../PollingTabBarViewController.swift | 28 +++++++ .../ResultsTableViewController.swift | 42 +++++++++++ .../VotingViewController.swift | 9 ++- Poll/Poll/VoteController.swift | 9 ++- Poll/Poll/VoteControllerProtocol.swift | 14 ++++ 12 files changed, 329 insertions(+), 20 deletions(-) create mode 100644 Poll/Poll/Storyboards/Combined.storyboard create mode 100644 Poll/Poll/Storyboards/Results.storyboard create mode 100644 Poll/Poll/View Controllers/CombinedViewController.swift create mode 100644 Poll/Poll/View Controllers/PollingTabBarViewController.swift create mode 100644 Poll/Poll/View Controllers/ResultsTableViewController.swift create mode 100644 Poll/Poll/VoteControllerProtocol.swift diff --git a/Poll/Poll.xcodeproj/project.pbxproj b/Poll/Poll.xcodeproj/project.pbxproj index 221bb0f..9bd8a2f 100644 --- a/Poll/Poll.xcodeproj/project.pbxproj +++ b/Poll/Poll.xcodeproj/project.pbxproj @@ -17,6 +17,12 @@ 33FE8693226E74B500DC2DF1 /* VoteController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33FE8692226E74B500DC2DF1 /* VoteController.swift */; }; 33FE8695226E75B400DC2DF1 /* Voting.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 33FE8694226E75B400DC2DF1 /* Voting.storyboard */; }; 33FE8697226E76B500DC2DF1 /* VotingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33FE8696226E76B500DC2DF1 /* VotingViewController.swift */; }; + 33FE869C226E77C700DC2DF1 /* Results.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 33FE869B226E77C700DC2DF1 /* Results.storyboard */; }; + 33FE869E226E780100DC2DF1 /* ResultsTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33FE869D226E780100DC2DF1 /* ResultsTableViewController.swift */; }; + 33FE86A0226E781700DC2DF1 /* Combined.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 33FE869F226E781700DC2DF1 /* Combined.storyboard */; }; + 33FE86A2226E78D600DC2DF1 /* CombinedViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33FE86A1226E78D600DC2DF1 /* CombinedViewController.swift */; }; + 33FE86A4226E7B6200DC2DF1 /* PollingTabBarViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33FE86A3226E7B6200DC2DF1 /* PollingTabBarViewController.swift */; }; + 33FE86A6226E7BC900DC2DF1 /* VoteControllerProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33FE86A5226E7BC900DC2DF1 /* VoteControllerProtocol.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,6 +50,12 @@ 33FE8692226E74B500DC2DF1 /* VoteController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VoteController.swift; sourceTree = ""; }; 33FE8694226E75B400DC2DF1 /* Voting.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Voting.storyboard; sourceTree = ""; }; 33FE8696226E76B500DC2DF1 /* VotingViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VotingViewController.swift; sourceTree = ""; }; + 33FE869B226E77C700DC2DF1 /* Results.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Results.storyboard; sourceTree = ""; }; + 33FE869D226E780100DC2DF1 /* ResultsTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResultsTableViewController.swift; sourceTree = ""; }; + 33FE869F226E781700DC2DF1 /* Combined.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Combined.storyboard; sourceTree = ""; }; + 33FE86A1226E78D600DC2DF1 /* CombinedViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CombinedViewController.swift; sourceTree = ""; }; + 33FE86A3226E7B6200DC2DF1 /* PollingTabBarViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PollingTabBarViewController.swift; sourceTree = ""; }; + 33FE86A5226E7BC900DC2DF1 /* VoteControllerProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VoteControllerProtocol.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -87,6 +99,7 @@ children = ( 33FE868E226E740500DC2DF1 /* Vote.swift */, 33FE8692226E74B500DC2DF1 /* VoteController.swift */, + 33FE86A5226E7BC900DC2DF1 /* VoteControllerProtocol.swift */, 33FE8698226E777A00DC2DF1 /* Storyboards */, 33FE869A226E77AD00DC2DF1 /* View Controllers */, 33FE8699226E778B00DC2DF1 /* Resources */, @@ -109,6 +122,8 @@ 33FE8677226E736400DC2DF1 /* LaunchScreen.storyboard */, 33FE8672226E736200DC2DF1 /* Main.storyboard */, 33FE8694226E75B400DC2DF1 /* Voting.storyboard */, + 33FE869B226E77C700DC2DF1 /* Results.storyboard */, + 33FE869F226E781700DC2DF1 /* Combined.storyboard */, ); path = Storyboards; sourceTree = ""; @@ -128,6 +143,9 @@ isa = PBXGroup; children = ( 33FE8696226E76B500DC2DF1 /* VotingViewController.swift */, + 33FE86A1226E78D600DC2DF1 /* CombinedViewController.swift */, + 33FE869D226E780100DC2DF1 /* ResultsTableViewController.swift */, + 33FE86A3226E7B6200DC2DF1 /* PollingTabBarViewController.swift */, ); path = "View Controllers"; sourceTree = ""; @@ -216,7 +234,9 @@ 33FE8679226E736400DC2DF1 /* LaunchScreen.storyboard in Resources */, 33FE8695226E75B400DC2DF1 /* Voting.storyboard in Resources */, 33FE8676226E736400DC2DF1 /* Assets.xcassets in Resources */, + 33FE869C226E77C700DC2DF1 /* Results.storyboard in Resources */, 33FE8691226E748300DC2DF1 /* colorNames.json in Resources */, + 33FE86A0226E781700DC2DF1 /* Combined.storyboard in Resources */, 33FE8674226E736200DC2DF1 /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -238,7 +258,11 @@ 33FE8693226E74B500DC2DF1 /* VoteController.swift in Sources */, 33FE866F226E736200DC2DF1 /* AppDelegate.swift in Sources */, 33FE868F226E740500DC2DF1 /* Vote.swift in Sources */, + 33FE86A6226E7BC900DC2DF1 /* VoteControllerProtocol.swift in Sources */, 33FE8697226E76B500DC2DF1 /* VotingViewController.swift in Sources */, + 33FE869E226E780100DC2DF1 /* ResultsTableViewController.swift in Sources */, + 33FE86A2226E78D600DC2DF1 /* CombinedViewController.swift in Sources */, + 33FE86A4226E7B6200DC2DF1 /* PollingTabBarViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Poll/Poll.xcodeproj/project.xcworkspace/xcuserdata/mredig.xcuserdatad/UserInterfaceState.xcuserstate b/Poll/Poll.xcodeproj/project.xcworkspace/xcuserdata/mredig.xcuserdatad/UserInterfaceState.xcuserstate index 6e59524f6ec3c19c43bc486e31b12e22ac870c9a..e6f29ed7568050645526900af402fb73f76222f5 100644 GIT binary patch literal 31776 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 literal 18632 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 q|H1sF`OEX0^IP)QyJ8UEcf`~LuACwMLZ diff --git a/Poll/Poll/Storyboards/Base.lproj/Main.storyboard b/Poll/Poll/Storyboards/Base.lproj/Main.storyboard index 78357f8..fb0471e 100644 --- a/Poll/Poll/Storyboards/Base.lproj/Main.storyboard +++ b/Poll/Poll/Storyboards/Base.lproj/Main.storyboard @@ -1,29 +1,62 @@ - + - - - + + - - - - - - - - - + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Poll/Poll/Storyboards/Combined.storyboard b/Poll/Poll/Storyboards/Combined.storyboard new file mode 100644 index 0000000..8dd8d88 --- /dev/null +++ b/Poll/Poll/Storyboards/Combined.storyboard @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Poll/Poll/Storyboards/Results.storyboard b/Poll/Poll/Storyboards/Results.storyboard new file mode 100644 index 0000000..d118ddc --- /dev/null +++ b/Poll/Poll/Storyboards/Results.storyboard @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Poll/Poll/Storyboards/Voting.storyboard b/Poll/Poll/Storyboards/Voting.storyboard index 1897dd4..f5fdc8f 100644 --- a/Poll/Poll/Storyboards/Voting.storyboard +++ b/Poll/Poll/Storyboards/Voting.storyboard @@ -1,5 +1,5 @@ - + diff --git a/Poll/Poll/View Controllers/CombinedViewController.swift b/Poll/Poll/View Controllers/CombinedViewController.swift new file mode 100644 index 0000000..2752bf6 --- /dev/null +++ b/Poll/Poll/View Controllers/CombinedViewController.swift @@ -0,0 +1,34 @@ +// +// CombinedViewController.swift +// Poll +// +// Created by Michael Redig on 4/22/19. +// Copyright © 2019 Michael Redig. All rights reserved. +// + +import UIKit + +class CombinedViewController: UIViewController, VoteControllerProtocol { + + var voteController: VoteController? + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + } + + + // MARK: - Navigation + + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destination. + // Pass the selected object to the new view controller. + + if segue.identifier == "VotingSegue" || segue.identifier == "ResultsSegue" { + if let dest = segue.destination as? VoteControllerProtocol { + dest.voteController = voteController + } + } + } +} diff --git a/Poll/Poll/View Controllers/PollingTabBarViewController.swift b/Poll/Poll/View Controllers/PollingTabBarViewController.swift new file mode 100644 index 0000000..ae19506 --- /dev/null +++ b/Poll/Poll/View Controllers/PollingTabBarViewController.swift @@ -0,0 +1,28 @@ +// +// PollingTabBarViewController.swift +// Poll +// +// Created by Michael Redig on 4/22/19. +// Copyright © 2019 Michael Redig. All rights reserved. +// + +import UIKit + +class PollingTabBarViewController: UITabBarController { + + let voteController = VoteController() + + override func viewDidLoad() { + super.viewDidLoad() + passVoteControllerToChildViewControllers() + } + + func passVoteControllerToChildViewControllers() { + guard let childControllers = viewControllers else { return } + for child in childControllers { + if let viewController = child as? VoteControllerProtocol { + viewController.voteController = voteController + } + } + } +} diff --git a/Poll/Poll/View Controllers/ResultsTableViewController.swift b/Poll/Poll/View Controllers/ResultsTableViewController.swift new file mode 100644 index 0000000..4f95b37 --- /dev/null +++ b/Poll/Poll/View Controllers/ResultsTableViewController.swift @@ -0,0 +1,42 @@ +// +// ResultsTableViewController.swift +// Poll +// +// Created by Michael Redig on 4/22/19. +// Copyright © 2019 Michael Redig. All rights reserved. +// + +import UIKit + +class ResultsTableViewController: UITableViewController, VoteControllerProtocol { + + var voteController: VoteController? + + override func viewDidLoad() { + super.viewDidLoad() + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + tableView.reloadData() + } + + // MARK: - Table view data source + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + // #warning Incomplete implementation, return the number of rows + return voteController?.votes.count ?? 0 + } + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "ResultCell", for: indexPath) + + let vote = voteController?.votes[indexPath.row] + cell.textLabel?.text = vote?.name + cell.detailTextLabel?.text = vote?.response + // Configure the cell... + + return cell + } + +} diff --git a/Poll/Poll/View Controllers/VotingViewController.swift b/Poll/Poll/View Controllers/VotingViewController.swift index 62a7001..c3dbe10 100644 --- a/Poll/Poll/View Controllers/VotingViewController.swift +++ b/Poll/Poll/View Controllers/VotingViewController.swift @@ -8,8 +8,10 @@ import UIKit -class VotingViewController: UIViewController { +class VotingViewController: UIViewController, VoteControllerProtocol { + var voteController: VoteController? + @IBOutlet var nameLabel: UITextField! @IBOutlet var responseLabel: UITextField! @@ -21,6 +23,10 @@ class VotingViewController: UIViewController { } @IBAction func submitButtonPressed(_ sender: UIButton) { + guard let name = nameLabel.text, let response = responseLabel.text else { return } + + voteController?.createNewVote(with: name, andResponse: response) + } /* @@ -32,5 +38,4 @@ class VotingViewController: UIViewController { // Pass the selected object to the new view controller. } */ - } diff --git a/Poll/Poll/VoteController.swift b/Poll/Poll/VoteController.swift index e8bb14c..9c1ee4b 100644 --- a/Poll/Poll/VoteController.swift +++ b/Poll/Poll/VoteController.swift @@ -10,12 +10,15 @@ import Foundation class VoteController { - var votes = [Vote]() - var voters = Set() + private var _votes = [Vote]() + var votes: [Vote] { + return _votes + } + private var voters = Set() func createNewVote(with name: String, andResponse response: String) { if !voters.contains(name) { // each person can only vote once! - votes.append(Vote(name: name, response: response)) + _votes.append(Vote(name: name, response: response)) voters.insert(name) } } diff --git a/Poll/Poll/VoteControllerProtocol.swift b/Poll/Poll/VoteControllerProtocol.swift new file mode 100644 index 0000000..51e78c3 --- /dev/null +++ b/Poll/Poll/VoteControllerProtocol.swift @@ -0,0 +1,14 @@ +// +// VoteControllerProtocol.swift +// Poll +// +// Created by Michael Redig on 4/22/19. +// Copyright © 2019 Michael Redig. All rights reserved. +// + +import Foundation + + +protocol VoteControllerProtocol: AnyObject { + var voteController: VoteController? { get set } +} From 30d12ba00c4ef41dd42e78cb7bdbe61371abad44 Mon Sep 17 00:00:00 2001 From: Michael Redig Date: Mon, 22 Apr 2019 18:30:32 -0500 Subject: [PATCH 3/7] fixed the tab bar icons --- .../UserInterfaceState.xcuserstate | Bin 31776 -> 34690 bytes .../Globe.imageset/Contents.json | 22 ++++++++++++++++++ .../Globe.imageset/Globe@2x.png | Bin 0 -> 1406 bytes .../Globe.imageset/Globe@3x.png | Bin 0 -> 2212 bytes .../Plus.imageset/Contents.json | 22 ++++++++++++++++++ .../Assets.xcassets/Plus.imageset/Plus@2x.png | Bin 0 -> 255 bytes .../Assets.xcassets/Plus.imageset/Plus@3x.png | Bin 0 -> 443 bytes .../Storyboards/Base.lproj/Main.storyboard | 9 ++++--- Poll/Poll/Storyboards/Combined.storyboard | 4 +++- Poll/Poll/Storyboards/Results.storyboard | 7 +++++- Poll/Poll/Storyboards/Voting.storyboard | 7 +++++- 11 files changed, 65 insertions(+), 6 deletions(-) create mode 100644 Poll/Poll/Resources/Assets.xcassets/Globe.imageset/Contents.json create mode 100644 Poll/Poll/Resources/Assets.xcassets/Globe.imageset/Globe@2x.png create mode 100644 Poll/Poll/Resources/Assets.xcassets/Globe.imageset/Globe@3x.png create mode 100644 Poll/Poll/Resources/Assets.xcassets/Plus.imageset/Contents.json create mode 100644 Poll/Poll/Resources/Assets.xcassets/Plus.imageset/Plus@2x.png create mode 100644 Poll/Poll/Resources/Assets.xcassets/Plus.imageset/Plus@3x.png diff --git a/Poll/Poll.xcodeproj/project.xcworkspace/xcuserdata/mredig.xcuserdatad/UserInterfaceState.xcuserstate b/Poll/Poll.xcodeproj/project.xcworkspace/xcuserdata/mredig.xcuserdatad/UserInterfaceState.xcuserstate index e6f29ed7568050645526900af402fb73f76222f5..69d3d815cba7096c09d74f8d6466d679bb509b3f 100644 GIT binary patch delta 17969 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 RNeInizkUNpBtN@B4w575{ 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 a>uKwG>lJ4v5JKmtn`dWcu=B(E?f(Jfd?ZZ( diff --git a/Poll/Poll/Resources/Assets.xcassets/Globe.imageset/Contents.json b/Poll/Poll/Resources/Assets.xcassets/Globe.imageset/Contents.json new file mode 100644 index 0000000..c172fca --- /dev/null +++ b/Poll/Poll/Resources/Assets.xcassets/Globe.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "Globe@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "Globe@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Poll/Poll/Resources/Assets.xcassets/Globe.imageset/Globe@2x.png b/Poll/Poll/Resources/Assets.xcassets/Globe.imageset/Globe@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..2abecca1eaebba4364366b44b56764a4068034a9 GIT binary patch literal 1406 zcmV-^1%djBP)}k1Q`w|+v- zpTNI`P|Ow}4slJm=oh>Xd<9CAP5FP_;}rLV$b48o0jUJK+V{b|0F0aHmv|O*O{{7B zO6Ho}HTw%8*q%uGB=(JbpUu`P5c753`o`i@0064 zSw)TgxrAmd5T}pP+{&Ry^t7?0k7B>YFx`cI80-gnm>FO>I01Yj>i-I2%iwzK;`T8I zu{HkXwWha6NOb;c=`@iwIQb+(|9Qq{MMy5fwlfl^WfObYK8n~zd=0OX^Y+n50wHm= zANI{UW;loD4PbqxuNoUp|DDf}4|)fi2%C!D*k0gyY+uVNCJ$rW1bznAUwZPW)Py=q zZGf(6ZJ?&I1jmr{U+CY0Q^0acUjeLKK<8dC3cPRVYac1cKGBUBoI?9vpI6#2*TieX zUfFZKnD!MjCT_jOAh)6X2Ev@Vc3B7tt=4bq8ebZm8njR2^9Q&w;(G|2O-k$bF_1ce ztZ&d&9-IeG%Me-^^sP>q5{aEWS3qzKcTyIjEk_ zUEALW$HMjw{C@{+lCv?NIu7NkoCgNofDMxVzMKj~n{gxXJZ<_T@TjyHc60hp0<~1_DI~7NN?e~?IngiJR9?cdxG+kP>k<;5#2?F5&R;T+ zdyP6{uL4$da=Z!jD%bZ0rqk-u$#FFu+XavPL2q)rx)=w3bjBF@$M~oS3Zl!!Ciyn~ zcR?(+#HP)BJMeNf2Fs%#tntqO3}2ncK^{l3WaFW$a*WCO7%l&waw<8pv{7_L2U&q) z3A^fx1F>s$TUzca@g_^f2K@ucs~{9#8yujK9 zK*!akz{&|aAAv*QxE*Mqr^@HcU2K)}PK@?xy6D^Bs%|wi(KYDL0KKU??gverRquDP zyEM4k8SBV%<973k+sadPVjsnpPu1Tv8`RUEqqTnO*IxNHAg4E37B?{80hfg5{D5&S zM=PrDt=~co))iScAg8Mi_Y;cWi`HwdsM8!vOpunEomV&N6m3quzG}_Tb`c#}*EJwe zwW&KHC(F&C)n!($%DIvu{@SN%tFPbv&tYZC<_Evn2MhoFd5Cb*qUhCaSHEfn0oUOvhrMXk+aIxxl7l`drigv7)!C zVy!8M_uEfwa`P|fKx`+{y7Z!R-1?O2gPzd$S9Y903GH#D`lafQz}$nZa(vOQUhxi) zBdQyF-7)K!tcyvFt0eKu&e5OgPDQP|;ZhUH{?-|)N_&96IseqyLE@B4k?7m8ZSq>< z_A+{cek!??T}jUZtwc}TcG)O-eJe`Vf>eSryOu}sFRh8JXnnQau-_4TGdK!j3C3*N zh>h1YzO|yGa=gy@Si(A|2Wzuv>7Zk68PL@mo4k!pT)Gj(J>jByLB-A%(B^zrX}Yz? z(N}w5ua)t5O4akXf<<5sm<^_bu(?LjM}XG3J_vS$J>Ya{ie4=L0f>Efo*9HNJpcdz M07*qoM6N<$f=DE_vj6}9 literal 0 HcmV?d00001 diff --git a/Poll/Poll/Resources/Assets.xcassets/Globe.imageset/Globe@3x.png b/Poll/Poll/Resources/Assets.xcassets/Globe.imageset/Globe@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..508872f8ad8eec5128dcf1128e711350948337a0 GIT binary patch literal 2212 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 literal 0 HcmV?d00001 diff --git a/Poll/Poll/Storyboards/Base.lproj/Main.storyboard b/Poll/Poll/Storyboards/Base.lproj/Main.storyboard index fb0471e..d9d5d4f 100644 --- a/Poll/Poll/Storyboards/Base.lproj/Main.storyboard +++ b/Poll/Poll/Storyboards/Base.lproj/Main.storyboard @@ -36,7 +36,7 @@ - + @@ -52,11 +52,14 @@ - + - + + + + diff --git a/Poll/Poll/Storyboards/Combined.storyboard b/Poll/Poll/Storyboards/Combined.storyboard index 8dd8d88..28b3b3b 100644 --- a/Poll/Poll/Storyboards/Combined.storyboard +++ b/Poll/Poll/Storyboards/Combined.storyboard @@ -10,7 +10,7 @@ - + @@ -44,6 +44,8 @@ + + diff --git a/Poll/Poll/Storyboards/Results.storyboard b/Poll/Poll/Storyboards/Results.storyboard index d118ddc..6895234 100644 --- a/Poll/Poll/Storyboards/Results.storyboard +++ b/Poll/Poll/Storyboards/Results.storyboard @@ -9,7 +9,7 @@ - + @@ -48,10 +48,15 @@ + + + + + diff --git a/Poll/Poll/Storyboards/Voting.storyboard b/Poll/Poll/Storyboards/Voting.storyboard index f5fdc8f..063e215 100644 --- a/Poll/Poll/Storyboards/Voting.storyboard +++ b/Poll/Poll/Storyboards/Voting.storyboard @@ -10,7 +10,7 @@ - + @@ -61,6 +61,8 @@ + + @@ -71,4 +73,7 @@ + + + From 74eaed258b2b7b8df76110a6c164eba560d3a0a7 Mon Sep 17 00:00:00 2001 From: Michael Redig Date: Mon, 22 Apr 2019 18:44:59 -0500 Subject: [PATCH 4/7] implemented date challenge --- Poll/Poll.xcodeproj/project.pbxproj | 4 +++ .../UserInterfaceState.xcuserstate | Bin 34690 -> 34458 bytes Poll/Poll/ResultTableViewCell.swift | 29 ++++++++++++++++ Poll/Poll/Storyboards/Results.storyboard | 31 ++++++++++++++---- .../ResultsTableViewController.swift | 15 ++++++--- Poll/Poll/Vote.swift | 4 ++- Poll/Poll/VoteController.swift | 4 +++ 7 files changed, 74 insertions(+), 13 deletions(-) create mode 100644 Poll/Poll/ResultTableViewCell.swift diff --git a/Poll/Poll.xcodeproj/project.pbxproj b/Poll/Poll.xcodeproj/project.pbxproj index 9bd8a2f..a653ed9 100644 --- a/Poll/Poll.xcodeproj/project.pbxproj +++ b/Poll/Poll.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 33F05EAD226E873700DEE322 /* ResultTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33F05EAC226E873700DEE322 /* ResultTableViewCell.swift */; }; 33FE866F226E736200DC2DF1 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33FE866E226E736200DC2DF1 /* AppDelegate.swift */; }; 33FE8674226E736200DC2DF1 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 33FE8672226E736200DC2DF1 /* Main.storyboard */; }; 33FE8676226E736400DC2DF1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33FE8675226E736400DC2DF1 /* Assets.xcassets */; }; @@ -36,6 +37,7 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 33F05EAC226E873700DEE322 /* ResultTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResultTableViewCell.swift; sourceTree = ""; }; 33FE866B226E736200DC2DF1 /* Poll.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Poll.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33FE866E226E736200DC2DF1 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33FE8673226E736200DC2DF1 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; @@ -100,6 +102,7 @@ 33FE868E226E740500DC2DF1 /* Vote.swift */, 33FE8692226E74B500DC2DF1 /* VoteController.swift */, 33FE86A5226E7BC900DC2DF1 /* VoteControllerProtocol.swift */, + 33F05EAC226E873700DEE322 /* ResultTableViewCell.swift */, 33FE8698226E777A00DC2DF1 /* Storyboards */, 33FE869A226E77AD00DC2DF1 /* View Controllers */, 33FE8699226E778B00DC2DF1 /* Resources */, @@ -262,6 +265,7 @@ 33FE8697226E76B500DC2DF1 /* VotingViewController.swift in Sources */, 33FE869E226E780100DC2DF1 /* ResultsTableViewController.swift in Sources */, 33FE86A2226E78D600DC2DF1 /* CombinedViewController.swift in Sources */, + 33F05EAD226E873700DEE322 /* ResultTableViewCell.swift in Sources */, 33FE86A4226E7B6200DC2DF1 /* PollingTabBarViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/Poll/Poll.xcodeproj/project.xcworkspace/xcuserdata/mredig.xcuserdatad/UserInterfaceState.xcuserstate b/Poll/Poll.xcodeproj/project.xcworkspace/xcuserdata/mredig.xcuserdatad/UserInterfaceState.xcuserstate index 69d3d815cba7096c09d74f8d6466d679bb509b3f..292634409189707b53477bd0a568220c250fe06f 100644 GIT binary patch delta 16346 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 delta 16085 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 - + - + + + + + + + + + + + + + diff --git a/Poll/Poll/View Controllers/ResultsTableViewController.swift b/Poll/Poll/View Controllers/ResultsTableViewController.swift index 4f95b37..ac87ee1 100644 --- a/Poll/Poll/View Controllers/ResultsTableViewController.swift +++ b/Poll/Poll/View Controllers/ResultsTableViewController.swift @@ -29,11 +29,16 @@ class ResultsTableViewController: UITableViewController, VoteControllerProtocol } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - let cell = tableView.dequeueReusableCell(withIdentifier: "ResultCell", for: indexPath) - - let vote = voteController?.votes[indexPath.row] - cell.textLabel?.text = vote?.name - cell.detailTextLabel?.text = vote?.response + let cell = tableView.dequeueReusableCell(withIdentifier: "ResultCell", for: indexPath) as! ResultTableViewCell + + let calendar = Calendar.current + guard let vote = voteController?.votes[indexPath.row] else { fatalError() } + cell.nameLabel.text = vote.name + cell.responseLabel.text = vote.response + + let components = calendar.dateComponents([.day, .hour, .minute, .second, .month], from: vote.timestamp) + + cell.timestampLabel.text = "\(components.month!)/\(components.day!) \(components.hour!):\(components.minute!):\(components.second!)" // Configure the cell... return cell diff --git a/Poll/Poll/Vote.swift b/Poll/Poll/Vote.swift index 534c647..c7d6e78 100644 --- a/Poll/Poll/Vote.swift +++ b/Poll/Poll/Vote.swift @@ -12,9 +12,11 @@ import Foundation struct Vote { let name: String let response: String + let timestamp: Date - init(name: String, response: String) { + init(name: String, response: String, timestamp: Date = Date()) { self.name = name self.response = response + self.timestamp = timestamp } } diff --git a/Poll/Poll/VoteController.swift b/Poll/Poll/VoteController.swift index 9c1ee4b..fe96375 100644 --- a/Poll/Poll/VoteController.swift +++ b/Poll/Poll/VoteController.swift @@ -20,6 +20,10 @@ class VoteController { if !voters.contains(name) { // each person can only vote once! _votes.append(Vote(name: name, response: response)) voters.insert(name) + + _votes.sort { (a, b) -> Bool in + a.timestamp > b.timestamp + } } } } From 1fa7559c1b7b0c4ca64f479d58d45c093dea8036 Mon Sep 17 00:00:00 2001 From: Michael Redig Date: Mon, 22 Apr 2019 18:57:05 -0500 Subject: [PATCH 5/7] set up result table as delegate --- .../UserInterfaceState.xcuserstate | Bin 34458 -> 35145 bytes .../CombinedViewController.swift | 8 ++++++-- .../ResultsTableViewController.swift | 6 ++++++ .../VotingViewController.swift | 3 +-- Poll/Poll/VoteController.swift | 9 +++++++++ 5 files changed, 22 insertions(+), 4 deletions(-) diff --git a/Poll/Poll.xcodeproj/project.xcworkspace/xcuserdata/mredig.xcuserdatad/UserInterfaceState.xcuserstate b/Poll/Poll.xcodeproj/project.xcworkspace/xcuserdata/mredig.xcuserdatad/UserInterfaceState.xcuserstate index 292634409189707b53477bd0a568220c250fe06f..c085ae08dc9e03c7458c7683bce9dc71e1f30250 100644 GIT binary patch delta 15675 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 O+=jPR!?!>6d;T97;y5D! delta 15201 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 diff --git a/Poll/Poll/View Controllers/CombinedViewController.swift b/Poll/Poll/View Controllers/CombinedViewController.swift index 2752bf6..d15acf3 100644 --- a/Poll/Poll/View Controllers/CombinedViewController.swift +++ b/Poll/Poll/View Controllers/CombinedViewController.swift @@ -22,13 +22,17 @@ class CombinedViewController: UIViewController, VoteControllerProtocol { // MARK: - Navigation override func prepare(for segue: UIStoryboardSegue, sender: Any?) { - // Get the new view controller using segue.destination. - // Pass the selected object to the new view controller. + + //FIXME: this is ugly but it works for now if segue.identifier == "VotingSegue" || segue.identifier == "ResultsSegue" { if let dest = segue.destination as? VoteControllerProtocol { dest.voteController = voteController } } + + if let dest = segue.destination as? ResultsTableViewController { + voteController?.delegate = dest + } } } diff --git a/Poll/Poll/View Controllers/ResultsTableViewController.swift b/Poll/Poll/View Controllers/ResultsTableViewController.swift index ac87ee1..e4e139f 100644 --- a/Poll/Poll/View Controllers/ResultsTableViewController.swift +++ b/Poll/Poll/View Controllers/ResultsTableViewController.swift @@ -45,3 +45,9 @@ class ResultsTableViewController: UITableViewController, VoteControllerProtocol } } + +extension ResultsTableViewController: VoteControllerDelegate { + func submittedVote(from voteController: VoteController) { + tableView.reloadData() + } +} diff --git a/Poll/Poll/View Controllers/VotingViewController.swift b/Poll/Poll/View Controllers/VotingViewController.swift index c3dbe10..37e59fc 100644 --- a/Poll/Poll/View Controllers/VotingViewController.swift +++ b/Poll/Poll/View Controllers/VotingViewController.swift @@ -11,7 +11,7 @@ import UIKit class VotingViewController: UIViewController, VoteControllerProtocol { var voteController: VoteController? - + @IBOutlet var nameLabel: UITextField! @IBOutlet var responseLabel: UITextField! @@ -26,7 +26,6 @@ class VotingViewController: UIViewController, VoteControllerProtocol { guard let name = nameLabel.text, let response = responseLabel.text else { return } voteController?.createNewVote(with: name, andResponse: response) - } /* diff --git a/Poll/Poll/VoteController.swift b/Poll/Poll/VoteController.swift index fe96375..f25b126 100644 --- a/Poll/Poll/VoteController.swift +++ b/Poll/Poll/VoteController.swift @@ -10,6 +10,8 @@ import Foundation class VoteController { + weak var delegate: VoteControllerDelegate? + private var _votes = [Vote]() var votes: [Vote] { return _votes @@ -24,6 +26,13 @@ class VoteController { _votes.sort { (a, b) -> Bool in a.timestamp > b.timestamp } + delegate?.submittedVote(from: self) } } } + + + +protocol VoteControllerDelegate: AnyObject { + func submittedVote(from voteController: VoteController) +} From 874b1afcc051bbed6a166595978205e89d29f2a8 Mon Sep 17 00:00:00 2001 From: Michael Redig Date: Mon, 22 Apr 2019 19:12:20 -0500 Subject: [PATCH 6/7] implemented color backgrounds --- Poll/Poll.xcodeproj/project.pbxproj | 4 + .../UserInterfaceState.xcuserstate | Bin 35145 -> 36353 bytes Poll/Poll/ColorStruct.swift | 154 ++++++++++++++++++ .../ResultsTableViewController.swift | 14 ++ .../VotingViewController.swift | 2 + 5 files changed, 174 insertions(+) create mode 100644 Poll/Poll/ColorStruct.swift diff --git a/Poll/Poll.xcodeproj/project.pbxproj b/Poll/Poll.xcodeproj/project.pbxproj index a653ed9..c17ee15 100644 --- a/Poll/Poll.xcodeproj/project.pbxproj +++ b/Poll/Poll.xcodeproj/project.pbxproj @@ -8,6 +8,7 @@ /* Begin PBXBuildFile section */ 33F05EAD226E873700DEE322 /* ResultTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33F05EAC226E873700DEE322 /* ResultTableViewCell.swift */; }; + 33F05EB1226E8CB800DEE322 /* ColorStruct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33F05EB0226E8CB800DEE322 /* ColorStruct.swift */; }; 33FE866F226E736200DC2DF1 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33FE866E226E736200DC2DF1 /* AppDelegate.swift */; }; 33FE8674226E736200DC2DF1 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 33FE8672226E736200DC2DF1 /* Main.storyboard */; }; 33FE8676226E736400DC2DF1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33FE8675226E736400DC2DF1 /* Assets.xcassets */; }; @@ -38,6 +39,7 @@ /* Begin PBXFileReference section */ 33F05EAC226E873700DEE322 /* ResultTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResultTableViewCell.swift; sourceTree = ""; }; + 33F05EB0226E8CB800DEE322 /* ColorStruct.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ColorStruct.swift; sourceTree = ""; }; 33FE866B226E736200DC2DF1 /* Poll.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Poll.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33FE866E226E736200DC2DF1 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33FE8673226E736200DC2DF1 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; @@ -103,6 +105,7 @@ 33FE8692226E74B500DC2DF1 /* VoteController.swift */, 33FE86A5226E7BC900DC2DF1 /* VoteControllerProtocol.swift */, 33F05EAC226E873700DEE322 /* ResultTableViewCell.swift */, + 33F05EB0226E8CB800DEE322 /* ColorStruct.swift */, 33FE8698226E777A00DC2DF1 /* Storyboards */, 33FE869A226E77AD00DC2DF1 /* View Controllers */, 33FE8699226E778B00DC2DF1 /* Resources */, @@ -258,6 +261,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 33F05EB1226E8CB800DEE322 /* ColorStruct.swift in Sources */, 33FE8693226E74B500DC2DF1 /* VoteController.swift in Sources */, 33FE866F226E736200DC2DF1 /* AppDelegate.swift in Sources */, 33FE868F226E740500DC2DF1 /* Vote.swift in Sources */, diff --git a/Poll/Poll.xcodeproj/project.xcworkspace/xcuserdata/mredig.xcuserdatad/UserInterfaceState.xcuserstate b/Poll/Poll.xcodeproj/project.xcworkspace/xcuserdata/mredig.xcuserdatad/UserInterfaceState.xcuserstate index c085ae08dc9e03c7458c7683bce9dc71e1f30250..5f5b960e0e60bdbc028c4555a6e2a4c02d902a1e 100644 GIT binary patch delta 16573 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 delta 15802 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 Zmc|{8d+q&K2<^YzmRJ4QS3iyW{|`cxSc3on diff --git a/Poll/Poll/ColorStruct.swift b/Poll/Poll/ColorStruct.swift new file mode 100644 index 0000000..d7128de --- /dev/null +++ b/Poll/Poll/ColorStruct.swift @@ -0,0 +1,154 @@ +// +// ColorStruct.swift +// colorCounter +// +// Created by Michael Redig on 4/14/19. +// Copyright © 2019 Michael Redig. All rights reserved. +// + +import Foundation +import UIKit + + +struct Color: Hashable, Codable { + var red: UInt8 + var green: UInt8 + var blue: UInt8 + var alpha: UInt8 + + var redFloat: CGFloat { + return CGFloat(red) / CGFloat(255) + } + var greenFloat: CGFloat { + return CGFloat(green) / CGFloat(255) + } + var blueFloat: CGFloat { + return CGFloat(blue) / CGFloat(255) + } + var alphaFloat: CGFloat { + return CGFloat(alpha) / CGFloat(255) + } + + var uiColor: UIColor { + return UIColor(red: redFloat, green: greenFloat, blue: blueFloat, alpha: alphaFloat) + } + + var isDarkColor: Bool { + return ((redFloat * 0.3) + (greenFloat * 0.59) + (blueFloat * 0.11)) < 0.5 + } + + var hexString: String { + let redHex = String(format: "%02X", red) + let greenHex = String(format: "%02X", green) + let blueHex = String(format: "%02X", blue) + return redHex + greenHex + blueHex + } + + init(red: UInt8, green: UInt8, blue: UInt8, alpha: UInt8 = 255) { + self.red = red + self.green = green + self.blue = blue + self.alpha = alpha + } + + static func distanceBetween(colorA: Color, colorB: Color) -> CGFloat { + return sqrt(pow((colorA.redFloat-colorB.redFloat), 2) + pow((colorA.greenFloat-colorB.greenFloat), 2) + pow((colorA.blueFloat-colorB.blueFloat), 2)) + } + + func distanceTo(color: Color) -> CGFloat { + return Color.distanceBetween(colorA: self, colorB: color) + } + + mutating func stochasticize(with granularity: UInt8, includeAlpha: Bool = false) { + red = (red / granularity) * granularity + green = (green / granularity) * granularity + blue = (blue / granularity) * granularity + if includeAlpha { + alpha = (alpha / granularity) * granularity + } + } + + mutating func average(with newColor: Color, currentCount: Int, includeAlpha: Bool = false) { + red = calculateAverage(existingValue: red, newValue: newColor.red, currentCount: currentCount) + green = calculateAverage(existingValue: green, newValue: newColor.green, currentCount: currentCount) + blue = calculateAverage(existingValue: blue, newValue: newColor.blue, currentCount: currentCount) + if includeAlpha { + alpha = calculateAverage(existingValue: alpha, newValue: newColor.alpha, currentCount: currentCount) + } + } + + func calculateAverage(existingValue: UInt8, newValue: UInt8, currentCount: Int) -> UInt8 { + guard currentCount >= 1 else { return existingValue } + return UInt8((CGFloat(existingValue) * CGFloat(currentCount) + CGFloat(newValue)) / CGFloat(currentCount + 1)) + } +} + +struct ColorStructDict: Codable { + let colorsByName: [String: Color] + + static func getColor(named proposedColorName: String) -> Color? { + guard let namedColors = namedColors else { fatalError("Couldn't load color names") } + + let proposedNameLC = proposedColorName.lowercased().replacingOccurrences(of: ##"\s+"##, with: "", options: .regularExpression, range: nil) + + var closestColor: (name: String, color: Color)? + for (name, color) in namedColors { + if name.lowercased() == proposedNameLC { + return color + } else if name.lowercased().contains(proposedNameLC) { + closestColor = (name, color) + } + } + + return closestColor?.color + } + + static func getNameForColor(color: Color, unCamelcase: Bool = true) -> (name: String, isExact: Bool) { + guard let namedColors = namedColors else { fatalError("Couldn't load color names") } + + var nearestName: String = "" + var nearestDistance: CGFloat = 15 + for (name, namedColor) in namedColors { + let distance = color.distanceTo(color: namedColor) + if distance < nearestDistance { + nearestDistance = distance + nearestName = name + } + if nearestDistance == 0 { + if unCamelcase { + nearestName = ColorStructDict.unCamelcase(string: nearestName) + } + return (nearestName, true) + } + } + + if unCamelcase { + nearestName = ColorStructDict.unCamelcase(string: nearestName) + } + return (nearestName, false) + } + + private static func unCamelcase(string: String) -> String { + let array = Array(string) + var outStr = "" + for (index, letter) in array.enumerated() { + if index == 0 { + outStr += String(letter).uppercased() + } else if (letter.isUppercase) { + outStr += " \(letter)" + } else { + outStr += String(letter) + } + } + return outStr + } + + static var namedColors: [String: Color]? = { + guard let jsonURL = Bundle.main.url(forResource: "colorNames", withExtension: "json") else { return nil } + guard let jsonData = try? Data(contentsOf: jsonURL) else { return nil } + + let decoder = JSONDecoder() + let theDict = try? decoder.decode(ColorStructDict.self, from: jsonData).colorsByName + return theDict + }() +} diff --git a/Poll/Poll/View Controllers/ResultsTableViewController.swift b/Poll/Poll/View Controllers/ResultsTableViewController.swift index e4e139f..800d989 100644 --- a/Poll/Poll/View Controllers/ResultsTableViewController.swift +++ b/Poll/Poll/View Controllers/ResultsTableViewController.swift @@ -39,6 +39,20 @@ class ResultsTableViewController: UITableViewController, VoteControllerProtocol let components = calendar.dateComponents([.day, .hour, .minute, .second, .month], from: vote.timestamp) cell.timestampLabel.text = "\(components.month!)/\(components.day!) \(components.hour!):\(components.minute!):\(components.second!)" + + if let bgColor = ColorStructDict.getColor(named: vote.response) { + cell.backgroundColor = bgColor.uiColor + if bgColor.isDarkColor { + cell.nameLabel.textColor = .white + cell.responseLabel.textColor = .white + cell.timestampLabel.textColor = .white + } + } else { + cell.backgroundColor = .white + cell.nameLabel.textColor = .black + cell.responseLabel.textColor = .black + cell.timestampLabel.textColor = .black + } // Configure the cell... return cell diff --git a/Poll/Poll/View Controllers/VotingViewController.swift b/Poll/Poll/View Controllers/VotingViewController.swift index 37e59fc..5e8c2d9 100644 --- a/Poll/Poll/View Controllers/VotingViewController.swift +++ b/Poll/Poll/View Controllers/VotingViewController.swift @@ -26,6 +26,8 @@ class VotingViewController: UIViewController, VoteControllerProtocol { guard let name = nameLabel.text, let response = responseLabel.text else { return } voteController?.createNewVote(with: name, andResponse: response) + nameLabel.text = "" + responseLabel.text = "" } /* From e602b91c392f540029f544274f52be149e3c4d62 Mon Sep 17 00:00:00 2001 From: Michael Redig Date: Mon, 22 Apr 2019 20:11:29 -0500 Subject: [PATCH 7/7] completed all challenges --- Poll/Poll.xcodeproj/project.pbxproj | 4 ++ .../UserInterfaceState.xcuserstate | Bin 36353 -> 37156 bytes Poll/Poll/Storyboards/Results.storyboard | 2 +- .../CombinedViewController.swift | 15 ++++- .../PollingTabBarViewController.swift | 16 +++++- .../ResultsTableViewController.swift | 3 + Poll/Poll/VoteController.swift | 5 +- Poll/Poll/VotingDataSource.swift | 54 ++++++++++++++++++ 8 files changed, 94 insertions(+), 5 deletions(-) create mode 100644 Poll/Poll/VotingDataSource.swift diff --git a/Poll/Poll.xcodeproj/project.pbxproj b/Poll/Poll.xcodeproj/project.pbxproj index c17ee15..256c578 100644 --- a/Poll/Poll.xcodeproj/project.pbxproj +++ b/Poll/Poll.xcodeproj/project.pbxproj @@ -9,6 +9,7 @@ /* Begin PBXBuildFile section */ 33F05EAD226E873700DEE322 /* ResultTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33F05EAC226E873700DEE322 /* ResultTableViewCell.swift */; }; 33F05EB1226E8CB800DEE322 /* ColorStruct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33F05EB0226E8CB800DEE322 /* ColorStruct.swift */; }; + 33F05EB3226E900100DEE322 /* VotingDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33F05EB2226E900100DEE322 /* VotingDataSource.swift */; }; 33FE866F226E736200DC2DF1 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33FE866E226E736200DC2DF1 /* AppDelegate.swift */; }; 33FE8674226E736200DC2DF1 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 33FE8672226E736200DC2DF1 /* Main.storyboard */; }; 33FE8676226E736400DC2DF1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33FE8675226E736400DC2DF1 /* Assets.xcassets */; }; @@ -40,6 +41,7 @@ /* Begin PBXFileReference section */ 33F05EAC226E873700DEE322 /* ResultTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResultTableViewCell.swift; sourceTree = ""; }; 33F05EB0226E8CB800DEE322 /* ColorStruct.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ColorStruct.swift; sourceTree = ""; }; + 33F05EB2226E900100DEE322 /* VotingDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VotingDataSource.swift; sourceTree = ""; }; 33FE866B226E736200DC2DF1 /* Poll.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Poll.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33FE866E226E736200DC2DF1 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33FE8673226E736200DC2DF1 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; @@ -106,6 +108,7 @@ 33FE86A5226E7BC900DC2DF1 /* VoteControllerProtocol.swift */, 33F05EAC226E873700DEE322 /* ResultTableViewCell.swift */, 33F05EB0226E8CB800DEE322 /* ColorStruct.swift */, + 33F05EB2226E900100DEE322 /* VotingDataSource.swift */, 33FE8698226E777A00DC2DF1 /* Storyboards */, 33FE869A226E77AD00DC2DF1 /* View Controllers */, 33FE8699226E778B00DC2DF1 /* Resources */, @@ -267,6 +270,7 @@ 33FE868F226E740500DC2DF1 /* Vote.swift in Sources */, 33FE86A6226E7BC900DC2DF1 /* VoteControllerProtocol.swift in Sources */, 33FE8697226E76B500DC2DF1 /* VotingViewController.swift in Sources */, + 33F05EB3226E900100DEE322 /* VotingDataSource.swift in Sources */, 33FE869E226E780100DC2DF1 /* ResultsTableViewController.swift in Sources */, 33FE86A2226E78D600DC2DF1 /* CombinedViewController.swift in Sources */, 33F05EAD226E873700DEE322 /* ResultTableViewCell.swift in Sources */, diff --git a/Poll/Poll.xcodeproj/project.xcworkspace/xcuserdata/mredig.xcuserdatad/UserInterfaceState.xcuserstate b/Poll/Poll.xcodeproj/project.xcworkspace/xcuserdata/mredig.xcuserdatad/UserInterfaceState.xcuserstate index 5f5b960e0e60bdbc028c4555a6e2a4c02d902a1e..ddfb661786e08dc266181e98320482e09b8b00f0 100644 GIT binary patch delta 14470 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 TW&muZW`51*TKDI-5%K>Ia+f|R delta 14117 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 HH|_a - + diff --git a/Poll/Poll/View Controllers/CombinedViewController.swift b/Poll/Poll/View Controllers/CombinedViewController.swift index d15acf3..a0a0eb5 100644 --- a/Poll/Poll/View Controllers/CombinedViewController.swift +++ b/Poll/Poll/View Controllers/CombinedViewController.swift @@ -11,6 +11,7 @@ import UIKit class CombinedViewController: UIViewController, VoteControllerProtocol { var voteController: VoteController? + var dataSource: VotingDataSource? override func viewDidLoad() { super.viewDidLoad() @@ -31,8 +32,18 @@ class CombinedViewController: UIViewController, VoteControllerProtocol { } } - if let dest = segue.destination as? ResultsTableViewController { - voteController?.delegate = dest + // remnant from pre data source extraction +// if let dest = segue.destination as? ResultsTableViewController { +// voteController?.delegate = dest +// } + + if let dest = segue.destination as? UITableViewController { + dest.tableView.dataSource = dataSource + NotificationCenter.default.addObserver(forName: NSNotification.Name("VotesUpdated"), object: nil, queue: nil) { [weak dest] (notification) in + dest?.tableView.reloadData() + } +// dest.tableView } + } } diff --git a/Poll/Poll/View Controllers/PollingTabBarViewController.swift b/Poll/Poll/View Controllers/PollingTabBarViewController.swift index ae19506..54eec60 100644 --- a/Poll/Poll/View Controllers/PollingTabBarViewController.swift +++ b/Poll/Poll/View Controllers/PollingTabBarViewController.swift @@ -11,9 +11,12 @@ import UIKit class PollingTabBarViewController: UITabBarController { let voteController = VoteController() + let dataSource = VotingDataSource() - override func viewDidLoad() { + override func viewDidLoad() { super.viewDidLoad() + + dataSource.voteController = voteController passVoteControllerToChildViewControllers() } @@ -23,6 +26,17 @@ class PollingTabBarViewController: UITabBarController { if let viewController = child as? VoteControllerProtocol { viewController.voteController = voteController } + + if let tableVC = child as? UITableViewController { + tableVC.tableView.dataSource = dataSource + NotificationCenter.default.addObserver(forName: NSNotification.Name("VotesUpdated"), object: nil, queue: nil) { [weak tableVC] (notification) in + tableVC?.tableView.reloadData() + } + } + + if let combinedVC = child as? CombinedViewController { + combinedVC.dataSource = dataSource + } } } } diff --git a/Poll/Poll/View Controllers/ResultsTableViewController.swift b/Poll/Poll/View Controllers/ResultsTableViewController.swift index 800d989..280d452 100644 --- a/Poll/Poll/View Controllers/ResultsTableViewController.swift +++ b/Poll/Poll/View Controllers/ResultsTableViewController.swift @@ -8,6 +8,9 @@ import UIKit +/** +Not used so as to fulfill the extra challenge. +*/ class ResultsTableViewController: UITableViewController, VoteControllerProtocol { var voteController: VoteController? diff --git a/Poll/Poll/VoteController.swift b/Poll/Poll/VoteController.swift index f25b126..0c7d783 100644 --- a/Poll/Poll/VoteController.swift +++ b/Poll/Poll/VoteController.swift @@ -27,12 +27,15 @@ class VoteController { a.timestamp > b.timestamp } delegate?.submittedVote(from: self) + NotificationCenter.default.post(name: NSNotification.Name("VotesUpdated"), object: nil) } } } - +/** +broke when removing resultstableviewcontroller for uitableviewcontroller +*/ protocol VoteControllerDelegate: AnyObject { func submittedVote(from voteController: VoteController) } diff --git a/Poll/Poll/VotingDataSource.swift b/Poll/Poll/VotingDataSource.swift new file mode 100644 index 0000000..427c0e3 --- /dev/null +++ b/Poll/Poll/VotingDataSource.swift @@ -0,0 +1,54 @@ +// +// VotingDataSource.swift +// Poll +// +// Created by Michael Redig on 4/22/19. +// Copyright © 2019 Michael Redig. All rights reserved. +// + +import Foundation +import UIKit + +class VotingDataSource: NSObject, UITableViewDataSource, VoteControllerProtocol { + var voteController: VoteController? + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return voteController?.votes.count ?? 0 + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "ResultCell", for: indexPath) as! ResultTableViewCell + + let calendar = Calendar.current + guard let vote = voteController?.votes[indexPath.row] else { fatalError() } + cell.nameLabel.text = vote.name + cell.responseLabel.text = vote.response + + let components = calendar.dateComponents([.day, .hour, .minute, .second, .month], from: vote.timestamp) + + cell.timestampLabel.text = "\(components.month!)/\(components.day!) \(components.hour!):\(components.minute!):\(components.second!)" + + if let bgColor = ColorStructDict.getColor(named: vote.response) { + cell.backgroundColor = bgColor.uiColor + if bgColor.isDarkColor { + cell.nameLabel.textColor = .white + cell.responseLabel.textColor = .white + cell.timestampLabel.textColor = .white + } else { + cell.nameLabel.textColor = .black + cell.responseLabel.textColor = .black + cell.timestampLabel.textColor = .black + } + } else { + cell.backgroundColor = .white + cell.nameLabel.textColor = .black + cell.responseLabel.textColor = .black + cell.timestampLabel.textColor = .black + } + // Configure the cell... + + return cell + } + + +}