diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..7c26ccad3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,106 @@ + +# Created by https://www.toptal.com/developers/gitignore/api/swift,xcode +# Edit at https://www.toptal.com/developers/gitignore?templates=swift,xcode + +### Swift ### +# Xcode +# +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + +## User settings +xcuserdata/ + +## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) +*.xcscmblueprint +*.xccheckout + +## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) +build/ +DerivedData/ +*.moved-aside +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 + +## Obj-C/Swift specific +*.hmap + +## App packaging +*.ipa +*.dSYM.zip +*.dSYM + +## Playgrounds +timeline.xctimeline +playground.xcworkspace + +# Swift Package Manager +# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. +# Packages/ +# Package.pins +# Package.resolved +# *.xcodeproj +# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata +# hence it is not needed unless you have added a package configuration file to your project +# .swiftpm + +.build/ + +# CocoaPods +# We recommend against adding the Pods directory to your .gitignore. However +# you should judge for yourself, the pros and cons are mentioned at: +# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control +# Pods/ +# Add this line if you want to avoid checking in source code from the Xcode workspace +# *.xcworkspace + +# Carthage +# Add this line if you want to avoid checking in source code from Carthage dependencies. +# Carthage/Checkouts + +Carthage/Build/ + +# Add this lines if you are using Accio dependency management (Deprecated since Xcode 12) +# Dependencies/ +# .accio/ + +# fastlane +# It is recommended to not store the screenshots in the git repo. +# Instead, use fastlane to re-generate the screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/#source-control + +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots/**/*.png +fastlane/test_output + +# Code Injection +# After new code Injection tools there's a generated folder /iOSInjectionProject +# https://github.com/johnno1962/injectionforxcode + +iOSInjectionProject/ + +### Xcode ### +# Xcode +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + + + + +## Gcc Patch +/*.gcno + +### Xcode Patch ### +*.xcodeproj/* +!*.xcodeproj/project.pbxproj +!*.xcodeproj/xcshareddata/ +!*.xcworkspace/contents.xcworkspacedata +**/xcshareddata/WorkspaceSettings.xcsettings + +# End of https://www.toptal.com/developers/gitignore/api/swift,xcode diff --git a/README.md b/README.md index 029ce7391..7b49a5363 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,67 @@ # baseball 그룹프로젝트 #3 + + +- iOS + - ZG + - BMO +- Backend + - K + +## 브랜치 전략 + +``` +upstream - team-7 + + + ------------{feature}----- review/BE-------- + | PR | | + ------------ dev/BE--------------------------------------- + | |--{feature-2} +main ------------------------------------------------------- + | + -------- dev/iOS------------ + | + review/iOS + +``` + +- 최상위에 iOS와 BE 폴더를 만든다. +- main 브랜치는 배포용 +- 주 개발 브랜치는 dev/iOS , dev/BE가 된다. 배포할 시점이 되면, dev 브랜치를 main으로 PR을 보내서 배포를 한다. +- 기능 추가는 dev 브랜치에서, {기능-이름} 형식으로 추가 브랜치를 만들고, dev 브랜치로 PR을 보낸다. +- 외부 리뷰용 브랜치로 review/iOS, review/BE 브랜치를 dev 에서 만들고, upstream/team-7로 PR을 보내 리뷰를 받는다. +- 리뷰와 관련하여 받은 피드백은 review에 추가한 후, dev 브랜치를 review 브랜치로 rebase 한다. + +## 커밋 컨벤션 + +``` +# : + +################################################## + + +# 본문은 위에 작성 +######################################################################## + +# 꼬릿말은 아래에 작성: ex) #이슈 번호 +issue: +# --- COMMIT END --- +# <타입> 리스트 +# feat : 기능 (새로운 기능) +# fix : 버그 (버그 수정) +# refactor: 리팩토링 +# style : 스타일 (코드 형식, 세미콜론 추가: 비즈니스 로직에 변경 없음) +# docs : 문서 (문서 추가, 수정, 삭제) +# test : 테스트 (테스트 코드 추가, 수정, 삭제: 비즈니스 로직에 변경 없음) +# chore : 기타 변경사항 (빌드 스크립트 수정 등) +# ------------------ +# 제목 첫 글자를 대문자로 +# 제목은 명령문으로 +# 제목 끝에 마침표(.) 금지 +# 제목과 본문을 한 줄 띄워 분리하기 +# 본문은 "어떻게" 보다 "무엇을", "왜"를 설명한다. +# 본문에 여러줄의 메시지를 작성할 땐 "-"로 구분 +# ------------------ + +``` diff --git a/iOS/baseball/baseball.xcodeproj/project.pbxproj b/iOS/baseball/baseball.xcodeproj/project.pbxproj new file mode 100644 index 000000000..fd9704d16 --- /dev/null +++ b/iOS/baseball/baseball.xcodeproj/project.pbxproj @@ -0,0 +1,492 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + 827E60342644FA160054F5E2 /* MyTeam.swift in Sources */ = {isa = PBXBuildFile; fileRef = 827E60332644FA160054F5E2 /* MyTeam.swift */; }; + 828F89A02644D07D00F928F0 /* BaseState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 828F899F2644D07D00F928F0 /* BaseState.swift */; }; + 829CFA3D2640379B00D9F635 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 829CFA3C2640379B00D9F635 /* AppDelegate.swift */; }; + 829CFA3F2640379B00D9F635 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 829CFA3E2640379B00D9F635 /* SceneDelegate.swift */; }; + 829CFA412640379B00D9F635 /* GameSelectViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 829CFA402640379B00D9F635 /* GameSelectViewController.swift */; }; + 829CFA442640379B00D9F635 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 829CFA422640379B00D9F635 /* Main.storyboard */; }; + 829CFA462640379C00D9F635 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 829CFA452640379C00D9F635 /* Assets.xcassets */; }; + 829CFA492640379C00D9F635 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 829CFA472640379C00D9F635 /* LaunchScreen.storyboard */; }; + 829CFA542640421900D9F635 /* MatchUpCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 829CFA532640421900D9F635 /* MatchUpCell.swift */; }; + 829CFA572640434600D9F635 /* GameSelectViewControllerManageable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 829CFA562640434600D9F635 /* GameSelectViewControllerManageable.swift */; }; + 82A9642A2643C6BA00E70A89 /* BaseballGameDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82A964292643C6BA00E70A89 /* BaseballGameDTO.swift */; }; + 82DB49E926404C76008B1EC0 /* InGameViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82DB49E826404C76008B1EC0 /* InGameViewController.swift */; }; + 82DB49EB26404C87008B1EC0 /* ScoreViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82DB49EA26404C87008B1EC0 /* ScoreViewController.swift */; }; + 82E20E1F2642692C006C80DF /* NetworkManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82E20E1E2642692C006C80DF /* NetworkManager.swift */; }; + 82FD39E92643DB71002AD9A2 /* TeamDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82FD39E82643DB71002AD9A2 /* TeamDTO.swift */; }; + CEA103C726413962008BA763 /* Player.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEA103C626413962008BA763 /* Player.swift */; }; + CEA103CA264139E5008BA763 /* Players.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEA103C9264139E5008BA763 /* Players.swift */; }; + CEA103CD26413AF2008BA763 /* Team.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEA103CC26413AF2008BA763 /* Team.swift */; }; + CEA103D026413BE5008BA763 /* Pitcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEA103CF26413BE5008BA763 /* Pitcher.swift */; }; + CEA103D326413D02008BA763 /* Game.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEA103D226413D02008BA763 /* Game.swift */; }; + CEA103D626413D8F008BA763 /* InningInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEA103D526413D8F008BA763 /* InningInfo.swift */; }; + CEA103D926413E91008BA763 /* PitchingHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEA103D826413E91008BA763 /* PitchingHistory.swift */; }; + CEA103DC26413F2C008BA763 /* InningScore.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEA103DB26413F2C008BA763 /* InningScore.swift */; }; + CEA5D6252643850700745C9D /* URLManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEA5D6242643850700745C9D /* URLManager.swift */; }; + CEA5D62826438B2100745C9D /* PitchingHistoryDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEA5D62726438B2100745C9D /* PitchingHistoryDataSource.swift */; }; + CEA5D62B26438DA100745C9D /* testCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEA5D62A26438DA100745C9D /* testCell.swift */; }; + CEA5D634264407C400745C9D /* InningInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEA5D633264407C400745C9D /* InningInfoView.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 827E60332644FA160054F5E2 /* MyTeam.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyTeam.swift; sourceTree = "<group>"; }; + 828F899F2644D07D00F928F0 /* BaseState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseState.swift; sourceTree = "<group>"; }; + 829CFA392640379B00D9F635 /* baseball.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = baseball.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 829CFA3C2640379B00D9F635 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; }; + 829CFA3E2640379B00D9F635 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; }; + 829CFA402640379B00D9F635 /* GameSelectViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameSelectViewController.swift; sourceTree = "<group>"; }; + 829CFA432640379B00D9F635 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; }; + 829CFA452640379C00D9F635 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; + 829CFA482640379C00D9F635 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; }; + 829CFA4A2640379C00D9F635 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; + 829CFA532640421900D9F635 /* MatchUpCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MatchUpCell.swift; sourceTree = "<group>"; }; + 829CFA562640434600D9F635 /* GameSelectViewControllerManageable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameSelectViewControllerManageable.swift; sourceTree = "<group>"; }; + 82A964292643C6BA00E70A89 /* BaseballGameDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseballGameDTO.swift; sourceTree = "<group>"; }; + 82DB49E826404C76008B1EC0 /* InGameViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InGameViewController.swift; sourceTree = "<group>"; }; + 82DB49EA26404C87008B1EC0 /* ScoreViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScoreViewController.swift; sourceTree = "<group>"; }; + 82E20E1E2642692C006C80DF /* NetworkManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkManager.swift; sourceTree = "<group>"; }; + 82FD39E82643DB71002AD9A2 /* TeamDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TeamDTO.swift; sourceTree = "<group>"; }; + CEA103C626413962008BA763 /* Player.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = Player.swift; path = baseball/Model/Entity/Player.swift; sourceTree = SOURCE_ROOT; }; + CEA103C9264139E5008BA763 /* Players.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = Players.swift; path = baseball/Model/Entity/Players.swift; sourceTree = SOURCE_ROOT; }; + CEA103CC26413AF2008BA763 /* Team.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = Team.swift; path = baseball/Model/Entity/Team.swift; sourceTree = SOURCE_ROOT; }; + CEA103CF26413BE5008BA763 /* Pitcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = Pitcher.swift; path = baseball/Model/Entity/Pitcher.swift; sourceTree = SOURCE_ROOT; }; + CEA103D226413D02008BA763 /* Game.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = Game.swift; path = baseball/Model/Entity/Game.swift; sourceTree = SOURCE_ROOT; }; + CEA103D526413D8F008BA763 /* InningInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = InningInfo.swift; path = baseball/Model/Entity/InningInfo.swift; sourceTree = SOURCE_ROOT; }; + CEA103D826413E91008BA763 /* PitchingHistory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = PitchingHistory.swift; path = baseball/Model/Entity/PitchingHistory.swift; sourceTree = SOURCE_ROOT; }; + CEA103DB26413F2C008BA763 /* InningScore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = InningScore.swift; path = baseball/Model/Entity/InningScore.swift; sourceTree = SOURCE_ROOT; }; + CEA5D6242643850700745C9D /* URLManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLManager.swift; sourceTree = "<group>"; }; + CEA5D62726438B2100745C9D /* PitchingHistoryDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PitchingHistoryDataSource.swift; sourceTree = "<group>"; }; + CEA5D62A26438DA100745C9D /* testCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = testCell.swift; sourceTree = "<group>"; }; + CEA5D633264407C400745C9D /* InningInfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InningInfoView.swift; sourceTree = "<group>"; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 829CFA362640379B00D9F635 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 829CFA302640379B00D9F635 = { + isa = PBXGroup; + children = ( + 829CFA3B2640379B00D9F635 /* baseball */, + 829CFA3A2640379B00D9F635 /* Products */, + ); + sourceTree = "<group>"; + }; + 829CFA3A2640379B00D9F635 /* Products */ = { + isa = PBXGroup; + children = ( + 829CFA392640379B00D9F635 /* baseball.app */, + ); + name = Products; + sourceTree = "<group>"; + }; + 829CFA3B2640379B00D9F635 /* baseball */ = { + isa = PBXGroup; + children = ( + 82E20E1D264267A0006C80DF /* Network */, + 829CFA552640432C00D9F635 /* Protocols */, + 829CFA52264041C400D9F635 /* Model */, + 829CFA51264041BF00D9F635 /* Controller */, + 829CFA50264041B600D9F635 /* View */, + 829CFA3C2640379B00D9F635 /* AppDelegate.swift */, + 829CFA3E2640379B00D9F635 /* SceneDelegate.swift */, + 829CFA422640379B00D9F635 /* Main.storyboard */, + 829CFA452640379C00D9F635 /* Assets.xcassets */, + 829CFA472640379C00D9F635 /* LaunchScreen.storyboard */, + 829CFA4A2640379C00D9F635 /* Info.plist */, + ); + path = baseball; + sourceTree = "<group>"; + }; + 829CFA50264041B600D9F635 /* View */ = { + isa = PBXGroup; + children = ( + 829CFA532640421900D9F635 /* MatchUpCell.swift */, + CEA5D62726438B2100745C9D /* PitchingHistoryDataSource.swift */, + CEA5D62A26438DA100745C9D /* testCell.swift */, + CEA5D633264407C400745C9D /* InningInfoView.swift */, + ); + path = View; + sourceTree = "<group>"; + }; + 829CFA51264041BF00D9F635 /* Controller */ = { + isa = PBXGroup; + children = ( + 829CFA402640379B00D9F635 /* GameSelectViewController.swift */, + 82DB49E826404C76008B1EC0 /* InGameViewController.swift */, + 82DB49EA26404C87008B1EC0 /* ScoreViewController.swift */, + ); + path = Controller; + sourceTree = "<group>"; + }; + 829CFA52264041C400D9F635 /* Model */ = { + isa = PBXGroup; + children = ( + 82A9642C2643CD6700E70A89 /* DTO */, + 82A9642B2643CA5B00E70A89 /* Entity */, + ); + path = Model; + sourceTree = "<group>"; + }; + 829CFA552640432C00D9F635 /* Protocols */ = { + isa = PBXGroup; + children = ( + 829CFA562640434600D9F635 /* GameSelectViewControllerManageable.swift */, + ); + path = Protocols; + sourceTree = "<group>"; + }; + 82A9642B2643CA5B00E70A89 /* Entity */ = { + isa = PBXGroup; + children = ( + CEA103C626413962008BA763 /* Player.swift */, + CEA103C9264139E5008BA763 /* Players.swift */, + CEA103CC26413AF2008BA763 /* Team.swift */, + CEA103CF26413BE5008BA763 /* Pitcher.swift */, + CEA103D226413D02008BA763 /* Game.swift */, + CEA103D526413D8F008BA763 /* InningInfo.swift */, + CEA103D826413E91008BA763 /* PitchingHistory.swift */, + CEA103DB26413F2C008BA763 /* InningScore.swift */, + 828F899F2644D07D00F928F0 /* BaseState.swift */, + 827E60332644FA160054F5E2 /* MyTeam.swift */, + ); + path = Entity; + sourceTree = "<group>"; + }; + 82A9642C2643CD6700E70A89 /* DTO */ = { + isa = PBXGroup; + children = ( + 82A964292643C6BA00E70A89 /* BaseballGameDTO.swift */, + 82FD39E82643DB71002AD9A2 /* TeamDTO.swift */, + ); + path = DTO; + sourceTree = "<group>"; + }; + 82E20E1D264267A0006C80DF /* Network */ = { + isa = PBXGroup; + children = ( + 82E20E1E2642692C006C80DF /* NetworkManager.swift */, + CEA5D6242643850700745C9D /* URLManager.swift */, + ); + path = Network; + sourceTree = "<group>"; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 829CFA382640379B00D9F635 /* baseball */ = { + isa = PBXNativeTarget; + buildConfigurationList = 829CFA4D2640379C00D9F635 /* Build configuration list for PBXNativeTarget "baseball" */; + buildPhases = ( + 829CFA352640379B00D9F635 /* Sources */, + 829CFA362640379B00D9F635 /* Frameworks */, + 829CFA372640379B00D9F635 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = baseball; + productName = baseball; + productReference = 829CFA392640379B00D9F635 /* baseball.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 829CFA312640379B00D9F635 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1250; + LastUpgradeCheck = 1250; + TargetAttributes = { + 829CFA382640379B00D9F635 = { + CreatedOnToolsVersion = 12.5; + }; + }; + }; + buildConfigurationList = 829CFA342640379B00D9F635 /* Build configuration list for PBXProject "baseball" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 829CFA302640379B00D9F635; + productRefGroup = 829CFA3A2640379B00D9F635 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 829CFA382640379B00D9F635 /* baseball */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 829CFA372640379B00D9F635 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 829CFA492640379C00D9F635 /* LaunchScreen.storyboard in Resources */, + 829CFA462640379C00D9F635 /* Assets.xcassets in Resources */, + 829CFA442640379B00D9F635 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 829CFA352640379B00D9F635 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CEA103CA264139E5008BA763 /* Players.swift in Sources */, + 82DB49EB26404C87008B1EC0 /* ScoreViewController.swift in Sources */, + 829CFA412640379B00D9F635 /* GameSelectViewController.swift in Sources */, + 82A9642A2643C6BA00E70A89 /* BaseballGameDTO.swift in Sources */, + CEA103D626413D8F008BA763 /* InningInfo.swift in Sources */, + 82E20E1F2642692C006C80DF /* NetworkManager.swift in Sources */, + 829CFA3D2640379B00D9F635 /* AppDelegate.swift in Sources */, + CEA5D634264407C400745C9D /* InningInfoView.swift in Sources */, + 829CFA542640421900D9F635 /* MatchUpCell.swift in Sources */, + CEA103DC26413F2C008BA763 /* InningScore.swift in Sources */, + 82FD39E92643DB71002AD9A2 /* TeamDTO.swift in Sources */, + 827E60342644FA160054F5E2 /* MyTeam.swift in Sources */, + CEA103C726413962008BA763 /* Player.swift in Sources */, + 82DB49E926404C76008B1EC0 /* InGameViewController.swift in Sources */, + CEA103D326413D02008BA763 /* Game.swift in Sources */, + 829CFA572640434600D9F635 /* GameSelectViewControllerManageable.swift in Sources */, + CEA103CD26413AF2008BA763 /* Team.swift in Sources */, + CEA5D6252643850700745C9D /* URLManager.swift in Sources */, + CEA103D026413BE5008BA763 /* Pitcher.swift in Sources */, + CEA103D926413E91008BA763 /* PitchingHistory.swift in Sources */, + 828F89A02644D07D00F928F0 /* BaseState.swift in Sources */, + 829CFA3F2640379B00D9F635 /* SceneDelegate.swift in Sources */, + CEA5D62B26438DA100745C9D /* testCell.swift in Sources */, + CEA5D62826438B2100745C9D /* PitchingHistoryDataSource.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 829CFA422640379B00D9F635 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 829CFA432640379B00D9F635 /* Base */, + ); + name = Main.storyboard; + sourceTree = "<group>"; + }; + 829CFA472640379C00D9F635 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 829CFA482640379C00D9F635 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = "<group>"; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 829CFA4B2640379C00D9F635 /* 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_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + 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; + 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 = 14.5; + 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; + }; + 829CFA4C2640379C00D9F635 /* 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_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + 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; + 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 = 14.5; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 829CFA4E2640379C00D9F635 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = 7W8PDLZ6N2; + INFOPLIST_FILE = baseball/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 14.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = jhPark.baseball; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 1; + }; + name = Debug; + }; + 829CFA4F2640379C00D9F635 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = 7W8PDLZ6N2; + INFOPLIST_FILE = baseball/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 14.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = jhPark.baseball; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 1; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 829CFA342640379B00D9F635 /* Build configuration list for PBXProject "baseball" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 829CFA4B2640379C00D9F635 /* Debug */, + 829CFA4C2640379C00D9F635 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 829CFA4D2640379C00D9F635 /* Build configuration list for PBXNativeTarget "baseball" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 829CFA4E2640379C00D9F635 /* Debug */, + 829CFA4F2640379C00D9F635 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 829CFA312640379B00D9F635 /* Project object */; +} diff --git a/iOS/baseball/baseball.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/iOS/baseball/baseball.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..919434a62 --- /dev/null +++ b/iOS/baseball/baseball.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Workspace + version = "1.0"> + <FileRef + location = "self:"> + </FileRef> +</Workspace> diff --git a/iOS/baseball/baseball.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/iOS/baseball/baseball.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/iOS/baseball/baseball.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>IDEDidComputeMac32BitWarning</key> + <true/> +</dict> +</plist> diff --git a/iOS/baseball/baseball.xcodeproj/xcshareddata/xcschemes/baseball.xcscheme b/iOS/baseball/baseball.xcodeproj/xcshareddata/xcschemes/baseball.xcscheme new file mode 100644 index 000000000..2e3f28f42 --- /dev/null +++ b/iOS/baseball/baseball.xcodeproj/xcshareddata/xcschemes/baseball.xcscheme @@ -0,0 +1,78 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Scheme + LastUpgradeVersion = "1240" + version = "1.3"> + <BuildAction + parallelizeBuildables = "YES" + buildImplicitDependencies = "YES"> + <BuildActionEntries> + <BuildActionEntry + buildForTesting = "YES" + buildForRunning = "YES" + buildForProfiling = "YES" + buildForArchiving = "YES" + buildForAnalyzing = "YES"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "829CFA382640379B00D9F635" + BuildableName = "baseball.app" + BlueprintName = "baseball" + ReferencedContainer = "container:baseball.xcodeproj"> + </BuildableReference> + </BuildActionEntry> + </BuildActionEntries> + </BuildAction> + <TestAction + buildConfiguration = "Debug" + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + shouldUseLaunchSchemeArgsEnv = "YES"> + <Testables> + </Testables> + </TestAction> + <LaunchAction + buildConfiguration = "Debug" + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + launchStyle = "0" + useCustomWorkingDirectory = "NO" + ignoresPersistentStateOnLaunch = "NO" + debugDocumentVersioning = "YES" + debugServiceExtension = "internal" + allowLocationSimulation = "YES"> + <BuildableProductRunnable + runnableDebuggingMode = "0"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "829CFA382640379B00D9F635" + BuildableName = "baseball.app" + BlueprintName = "baseball" + ReferencedContainer = "container:baseball.xcodeproj"> + </BuildableReference> + </BuildableProductRunnable> + </LaunchAction> + <ProfileAction + buildConfiguration = "Release" + shouldUseLaunchSchemeArgsEnv = "YES" + savedToolIdentifier = "" + useCustomWorkingDirectory = "NO" + debugDocumentVersioning = "YES"> + <BuildableProductRunnable + runnableDebuggingMode = "0"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "829CFA382640379B00D9F635" + BuildableName = "baseball.app" + BlueprintName = "baseball" + ReferencedContainer = "container:baseball.xcodeproj"> + </BuildableReference> + </BuildableProductRunnable> + </ProfileAction> + <AnalyzeAction + buildConfiguration = "Debug"> + </AnalyzeAction> + <ArchiveAction + buildConfiguration = "Release" + revealArchiveInOrganizer = "YES"> + </ArchiveAction> +</Scheme> diff --git a/iOS/baseball/baseball/AppDelegate.swift b/iOS/baseball/baseball/AppDelegate.swift new file mode 100644 index 000000000..bc5838182 --- /dev/null +++ b/iOS/baseball/baseball/AppDelegate.swift @@ -0,0 +1,36 @@ +// +// AppDelegate.swift +// baseball +// +// Created by 박정하 on 2021/05/03. +// + +import UIKit + +@main +class AppDelegate: UIResponder, UIApplicationDelegate { + + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + // MARK: UISceneSession Lifecycle + + func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { + // Called when a new scene session is being created. + // Use this method to select a configuration to create the new scene with. + return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) + } + + func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) { + // Called when the user discards a scene session. + // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. + // Use this method to release any resources that were specific to the discarded scenes, as they will not return. + } + + +} + diff --git a/iOS/baseball/baseball/Assets.xcassets/AccentColor.colorset/Contents.json b/iOS/baseball/baseball/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 000000000..eb8789700 --- /dev/null +++ b/iOS/baseball/baseball/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iOS/baseball/baseball/Assets.xcassets/AppIcon.appiconset/Contents.json b/iOS/baseball/baseball/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000..9221b9bb1 --- /dev/null +++ b/iOS/baseball/baseball/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iOS/baseball/baseball/Assets.xcassets/Contents.json b/iOS/baseball/baseball/Assets.xcassets/Contents.json new file mode 100644 index 000000000..73c00596a --- /dev/null +++ b/iOS/baseball/baseball/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iOS/baseball/baseball/Base.lproj/LaunchScreen.storyboard b/iOS/baseball/baseball/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 000000000..865e9329f --- /dev/null +++ b/iOS/baseball/baseball/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM"> + <dependencies> + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/> + <capability name="Safe area layout guides" minToolsVersion="9.0"/> + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> + </dependencies> + <scenes> + <!--View Controller--> + <scene sceneID="EHf-IW-A2E"> + <objects> + <viewController id="01J-lp-oVM" sceneMemberID="viewController"> + <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3"> + <rect key="frame" x="0.0" y="0.0" width="375" height="667"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <color key="backgroundColor" xcode11CocoaTouchSystemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/> + <viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/> + </view> + </viewController> + <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/> + </objects> + <point key="canvasLocation" x="53" y="375"/> + </scene> + </scenes> +</document> diff --git a/iOS/baseball/baseball/Base.lproj/Main.storyboard b/iOS/baseball/baseball/Base.lproj/Main.storyboard new file mode 100644 index 000000000..7a14234ec --- /dev/null +++ b/iOS/baseball/baseball/Base.lproj/Main.storyboard @@ -0,0 +1,668 @@ +<?xml version="1.0" encoding="UTF-8"?> +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="17701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="BYZ-38-t0r"> + <device id="retina6_1" orientation="portrait" appearance="light"/> + <dependencies> + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="17703"/> + <capability name="Safe area layout guides" minToolsVersion="9.0"/> + <capability name="Stack View standard spacing" minToolsVersion="9.0"/> + <capability name="System colors in document resources" minToolsVersion="11.0"/> + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> + </dependencies> + <scenes> + <!--Game Select View Controller--> + <scene sceneID="tne-QT-ifu"> + <objects> + <viewController id="BYZ-38-t0r" customClass="GameSelectViewController" customModule="baseball" customModuleProvider="target" sceneMemberID="viewController"> + <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC"> + <rect key="frame" x="0.0" y="0.0" width="414" height="896"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="게임 목록" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="CER-rK-pVr"> + <rect key="frame" x="148" y="73" width="118" height="39"/> + <fontDescription key="fontDescription" type="boldSystem" pointSize="32"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" distribution="fillEqually" spacing="30" translatesAutoresizingMaskIntoConstraints="NO" id="kqf-77-Rs6"> + <rect key="frame" x="20" y="152" width="374" height="110.5"/> + <subviews> + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="F4A-Ws-P4J" customClass="MatchUpCell" customModule="baseball" customModuleProvider="target"> + <rect key="frame" x="0.0" y="0.0" width="374" height="110.5"/> + <subviews> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="HOME" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="vkN-x8-wNH"> + <rect key="frame" x="45" y="45" width="49" height="20.5"/> + <accessibility key="accessibilityConfiguration"> + <accessibilityTraits key="traits" none="YES"/> + </accessibility> + <fontDescription key="fontDescription" type="system" pointSize="17"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="VS" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="6Tl-Iv-iee"> + <rect key="frame" x="175.5" y="45" width="23" height="20.5"/> + <fontDescription key="fontDescription" type="boldSystem" pointSize="17"/> + <color key="textColor" white="0.33333333333333331" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> + <nil key="highlightedColor"/> + </label> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="AWAY" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="o8f-b2-a5K"> + <rect key="frame" x="280" y="45" width="49" height="20.5"/> + <fontDescription key="fontDescription" type="system" pointSize="17"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="GAME N" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="BRB-ej-flD"> + <rect key="frame" x="160" y="8" width="54" height="17"/> + <fontDescription key="fontDescription" type="system" pointSize="14"/> + <color key="textColor" systemColor="systemRedColor"/> + <nil key="highlightedColor"/> + </label> + </subviews> + <color key="backgroundColor" systemColor="systemGray4Color"/> + <constraints> + <constraint firstItem="vkN-x8-wNH" firstAttribute="top" secondItem="F4A-Ws-P4J" secondAttribute="top" constant="45" id="3uS-k9-iNO"/> + <constraint firstItem="BRB-ej-flD" firstAttribute="centerX" secondItem="F4A-Ws-P4J" secondAttribute="centerX" id="BlL-Iu-f5J"/> + <constraint firstAttribute="trailing" secondItem="o8f-b2-a5K" secondAttribute="trailing" constant="45" id="GTO-4z-Trj"/> + <constraint firstItem="vkN-x8-wNH" firstAttribute="centerY" secondItem="F4A-Ws-P4J" secondAttribute="centerY" id="J5M-RS-DYq"/> + <constraint firstAttribute="trailing" relation="lessThanOrEqual" secondItem="vkN-x8-wNH" secondAttribute="trailing" constant="280" id="MEN-RI-C2y"/> + <constraint firstItem="6Tl-Iv-iee" firstAttribute="centerY" secondItem="F4A-Ws-P4J" secondAttribute="centerY" id="N93-Z1-qc7"/> + <constraint firstItem="vkN-x8-wNH" firstAttribute="leading" secondItem="F4A-Ws-P4J" secondAttribute="leading" constant="45" id="Nw8-Ns-CCG"/> + <constraint firstItem="o8f-b2-a5K" firstAttribute="top" secondItem="F4A-Ws-P4J" secondAttribute="top" constant="45" id="PhE-b1-OMX"/> + <constraint firstItem="o8f-b2-a5K" firstAttribute="leading" relation="lessThanOrEqual" secondItem="F4A-Ws-P4J" secondAttribute="leading" constant="280" id="TLP-cY-LXj"/> + <constraint firstItem="BRB-ej-flD" firstAttribute="top" secondItem="F4A-Ws-P4J" secondAttribute="top" constant="8" id="bRL-Dh-lte"/> + <constraint firstItem="6Tl-Iv-iee" firstAttribute="centerX" secondItem="F4A-Ws-P4J" secondAttribute="centerX" id="mqr-EV-VuD"/> + <constraint firstItem="o8f-b2-a5K" firstAttribute="centerY" secondItem="F4A-Ws-P4J" secondAttribute="centerY" id="zBA-Mp-HZ7"/> + </constraints> + <userDefinedRuntimeAttributes> + <userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius"> + <integer key="value" value="10"/> + </userDefinedRuntimeAttribute> + </userDefinedRuntimeAttributes> + <connections> + <outlet property="awayLabel" destination="o8f-b2-a5K" id="994-DK-LNg"/> + <outlet property="gameNumber" destination="BRB-ej-flD" id="iIe-6R-vxv"/> + <outlet property="homeLabel" destination="vkN-x8-wNH" id="0Ux-dX-zmf"/> + </connections> + </view> + </subviews> + </stackView> + </subviews> + <viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/> + <color key="backgroundColor" systemColor="systemBackgroundColor"/> + <constraints> + <constraint firstItem="kqf-77-Rs6" firstAttribute="leading" secondItem="6Tk-OE-BBY" secondAttribute="leading" constant="20" id="Edf-6L-NII"/> + <constraint firstItem="kqf-77-Rs6" firstAttribute="top" secondItem="CER-rK-pVr" secondAttribute="bottom" constant="40" id="LL4-11-Grp"/> + <constraint firstItem="CER-rK-pVr" firstAttribute="top" secondItem="6Tk-OE-BBY" secondAttribute="top" constant="29" id="Qgk-Bn-HNm"/> + <constraint firstItem="CER-rK-pVr" firstAttribute="centerX" secondItem="6Tk-OE-BBY" secondAttribute="centerX" id="SVE-xk-iCz"/> + <constraint firstItem="CER-rK-pVr" firstAttribute="height" relation="greaterThanOrEqual" secondItem="6Tk-OE-BBY" secondAttribute="height" multiplier="0.0476773" id="d9m-UE-kQs"/> + <constraint firstItem="6Tk-OE-BBY" firstAttribute="trailing" relation="lessThanOrEqual" secondItem="CER-rK-pVr" secondAttribute="trailing" constant="148" id="lYk-nZ-b8w"/> + <constraint firstItem="6Tk-OE-BBY" firstAttribute="trailing" secondItem="kqf-77-Rs6" secondAttribute="trailing" constant="20" id="sCb-vV-N6r"/> + </constraints> + </view> + <connections> + <outlet property="matchupCell" destination="F4A-Ws-P4J" id="PMs-j5-EW3"/> + <segue destination="xVD-pq-WX1" kind="presentation" identifier="toInGame" modalPresentationStyle="fullScreen" id="sUA-Cb-yas"/> + </connections> + </viewController> + <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/> + </objects> + <point key="canvasLocation" x="247.82608695652175" y="125.89285714285714"/> + </scene> + <!--Item 2--> + <scene sceneID="3Oj-ig-GQ0"> + <objects> + <viewController id="jNJ-h5-3qc" customClass="ScoreViewController" customModule="baseball" customModuleProvider="target" sceneMemberID="viewController"> + <view key="view" contentMode="scaleToFill" id="Oel-Kf-in5"> + <rect key="frame" x="0.0" y="0.0" width="414" height="896"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="2vD-BE-HWc"> + <rect key="frame" x="0.0" y="44" width="414" height="80"/> + <subviews> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="VS" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="dpp-17-FPG"> + <rect key="frame" x="194" y="28" width="26.5" height="24"/> + <fontDescription key="fontDescription" type="boldSystem" pointSize="20"/> + <color key="textColor" white="0.33333333329999998" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> + <nil key="highlightedColor"/> + </label> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="N" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="cd4-mH-Vdq"> + <rect key="frame" x="149.5" y="28" width="15" height="24"/> + <fontDescription key="fontDescription" type="boldSystem" pointSize="20"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="N" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="e3l-KG-pe3"> + <rect key="frame" x="250" y="28" width="15" height="24"/> + <fontDescription key="fontDescription" type="boldSystem" pointSize="20"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="HOME" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="D6c-SY-LRe"> + <rect key="frame" x="28" y="24.5" width="77.5" height="31.5"/> + <fontDescription key="fontDescription" type="boldSystem" pointSize="26"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="AWAY" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="oVt-FA-PLT"> + <rect key="frame" x="312" y="24.5" width="74" height="31.5"/> + <fontDescription key="fontDescription" type="boldSystem" pointSize="26"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + </subviews> + <color key="backgroundColor" systemColor="systemBackgroundColor"/> + <constraints> + <constraint firstItem="e3l-KG-pe3" firstAttribute="centerY" secondItem="dpp-17-FPG" secondAttribute="centerY" id="2X1-Tr-isn"/> + <constraint firstItem="D6c-SY-LRe" firstAttribute="centerY" secondItem="2vD-BE-HWc" secondAttribute="centerY" id="K31-iS-2ll"/> + <constraint firstItem="dpp-17-FPG" firstAttribute="centerX" secondItem="2vD-BE-HWc" secondAttribute="centerX" id="Llt-8d-Fcy"/> + <constraint firstItem="dpp-17-FPG" firstAttribute="centerY" secondItem="2vD-BE-HWc" secondAttribute="centerY" id="N2a-mc-moc"/> + <constraint firstItem="dpp-17-FPG" firstAttribute="leading" secondItem="cd4-mH-Vdq" secondAttribute="trailing" priority="750" constant="29.5" id="NuJ-7f-iCe"/> + <constraint firstAttribute="trailing" secondItem="oVt-FA-PLT" secondAttribute="trailing" constant="28" id="PA3-WP-XVR"/> + <constraint firstItem="D6c-SY-LRe" firstAttribute="leading" secondItem="2vD-BE-HWc" secondAttribute="leading" constant="28" id="SXC-Wf-CyV"/> + <constraint firstAttribute="height" constant="80" id="XC6-Dp-bvA"/> + <constraint firstItem="oVt-FA-PLT" firstAttribute="leading" relation="lessThanOrEqual" secondItem="e3l-KG-pe3" secondAttribute="trailing" constant="81" id="YT3-vf-iyp"/> + <constraint firstItem="cd4-mH-Vdq" firstAttribute="centerY" secondItem="dpp-17-FPG" secondAttribute="centerY" id="bm6-4m-izm"/> + <constraint firstItem="oVt-FA-PLT" firstAttribute="centerY" secondItem="2vD-BE-HWc" secondAttribute="centerY" id="cOi-Gj-zAT"/> + <constraint firstItem="cd4-mH-Vdq" firstAttribute="leading" relation="lessThanOrEqual" secondItem="D6c-SY-LRe" secondAttribute="trailing" constant="81" id="fMt-Xu-WYQ"/> + <constraint firstItem="e3l-KG-pe3" firstAttribute="leading" secondItem="dpp-17-FPG" secondAttribute="trailing" priority="750" constant="29.5" id="pJI-Sf-d1g"/> + </constraints> + </view> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="AWAY" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="eab-Lm-VT8"> + <rect key="frame" x="20" y="187" width="41" height="18"/> + <fontDescription key="fontDescription" type="system" pointSize="15"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="HOME" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="AXU-72-PXy"> + <rect key="frame" x="20" y="164" width="44" height="18"/> + <fontDescription key="fontDescription" type="system" pointSize="15"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + <stackView opaque="NO" contentMode="scaleToFill" distribution="equalSpacing" spacingType="standard" translatesAutoresizingMaskIntoConstraints="NO" id="Ljh-0i-iaa"> + <rect key="frame" x="74" y="137" width="310.5" height="21"/> + <subviews> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="1" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="BcM-y9-LHg" userLabel="1"> + <rect key="frame" x="0.0" y="0.0" width="21" height="21"/> + <constraints> + <constraint firstAttribute="width" secondItem="BcM-y9-LHg" secondAttribute="height" multiplier="1:1" id="Kol-cF-9eP"/> + </constraints> + <fontDescription key="fontDescription" type="system" pointSize="17"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="2" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="tij-CE-ZCB" userLabel="2"> + <rect key="frame" x="29" y="0.0" width="21" height="21"/> + <constraints> + <constraint firstAttribute="width" secondItem="tij-CE-ZCB" secondAttribute="height" multiplier="1:1" id="wGd-Q7-aAQ"/> + </constraints> + <fontDescription key="fontDescription" type="system" pointSize="17"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="3" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="t15-UP-9cK" userLabel="3"> + <rect key="frame" x="58" y="0.0" width="21" height="21"/> + <constraints> + <constraint firstAttribute="width" secondItem="t15-UP-9cK" secondAttribute="height" multiplier="1:1" id="tGw-c2-ICf"/> + </constraints> + <fontDescription key="fontDescription" type="system" pointSize="17"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="4" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="laR-Ad-Oyu" userLabel="4"> + <rect key="frame" x="87" y="0.0" width="21" height="21"/> + <constraints> + <constraint firstAttribute="width" secondItem="laR-Ad-Oyu" secondAttribute="height" multiplier="1:1" id="ncM-pw-TOV"/> + </constraints> + <fontDescription key="fontDescription" type="system" pointSize="17"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="5" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="86l-Jn-sfh" userLabel="5"> + <rect key="frame" x="116" y="0.0" width="21" height="21"/> + <constraints> + <constraint firstAttribute="width" secondItem="86l-Jn-sfh" secondAttribute="height" multiplier="1:1" id="7F8-07-ylt"/> + </constraints> + <fontDescription key="fontDescription" type="system" pointSize="17"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="6" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="MfM-OO-BE0" userLabel="6"> + <rect key="frame" x="145" y="0.0" width="20.5" height="21"/> + <constraints> + <constraint firstAttribute="width" secondItem="MfM-OO-BE0" secondAttribute="height" multiplier="1:1" id="xuS-aI-fxO"/> + </constraints> + <fontDescription key="fontDescription" type="system" pointSize="17"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="7" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Wao-33-js8" userLabel="7"> + <rect key="frame" x="173.5" y="0.0" width="21" height="21"/> + <constraints> + <constraint firstAttribute="width" secondItem="Wao-33-js8" secondAttribute="height" multiplier="1:1" id="2zF-CX-VyL"/> + </constraints> + <fontDescription key="fontDescription" type="system" pointSize="17"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="8" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="kmt-xA-UY9" userLabel="8"> + <rect key="frame" x="202.5" y="0.0" width="21" height="21"/> + <constraints> + <constraint firstAttribute="width" secondItem="kmt-xA-UY9" secondAttribute="height" multiplier="1:1" id="NTS-9B-7N0"/> + </constraints> + <fontDescription key="fontDescription" type="system" pointSize="17"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="9" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ctx-h9-GBo" userLabel="9"> + <rect key="frame" x="231.5" y="0.0" width="21" height="21"/> + <constraints> + <constraint firstAttribute="width" secondItem="ctx-h9-GBo" secondAttribute="height" multiplier="1:1" id="zEo-1Y-1Ne"/> + </constraints> + <fontDescription key="fontDescription" type="system" pointSize="17"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="10" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="8pR-gL-Ib6" userLabel="10"> + <rect key="frame" x="260.5" y="0.0" width="21" height="21"/> + <constraints> + <constraint firstAttribute="width" secondItem="8pR-gL-Ib6" secondAttribute="height" multiplier="1:1" id="TNt-c0-EFQ"/> + </constraints> + <fontDescription key="fontDescription" type="system" pointSize="17"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="R" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Ogq-OE-xtM"> + <rect key="frame" x="289.5" y="0.0" width="21" height="21"/> + <constraints> + <constraint firstAttribute="width" secondItem="Ogq-OE-xtM" secondAttribute="height" multiplier="1:1" id="IcO-tV-0Xo"/> + </constraints> + <fontDescription key="fontDescription" type="system" pointSize="17"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + </subviews> + </stackView> + <stackView opaque="NO" contentMode="scaleToFill" distribution="equalSpacing" spacingType="standard" translatesAutoresizingMaskIntoConstraints="NO" id="8nh-zG-L49"> + <rect key="frame" x="74" y="163" width="20.5" height="20"/> + <subviews> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="kP7-xY-sZI"> + <rect key="frame" x="0.0" y="0.0" width="20.5" height="20"/> + <constraints> + <constraint firstAttribute="width" secondItem="kP7-xY-sZI" secondAttribute="height" multiplier="1:1" id="svz-cO-cgP"/> + </constraints> + <fontDescription key="fontDescription" type="system" pointSize="17"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + </subviews> + </stackView> + <stackView opaque="NO" contentMode="scaleToFill" distribution="equalSpacing" spacingType="standard" translatesAutoresizingMaskIntoConstraints="NO" id="kkk-Me-ftz"> + <rect key="frame" x="74" y="186" width="20.5" height="20"/> + <subviews> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qzW-bz-5Sc"> + <rect key="frame" x="0.0" y="0.0" width="20.5" height="20"/> + <constraints> + <constraint firstAttribute="width" secondItem="qzW-bz-5Sc" secondAttribute="height" multiplier="1:1" id="RtP-BX-jbr"/> + </constraints> + <fontDescription key="fontDescription" type="system" pointSize="17"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + </subviews> + </stackView> + <segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="Vdc-3r-Vit"> + <rect key="frame" x="16" y="231" width="382" height="32"/> + <segments> + <segment title="HOME"/> + <segment title="AWAY"/> + </segments> + </segmentedControl> + <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="B5X-Rp-rJQ"> + <rect key="frame" x="16" y="294" width="382" height="504"/> + <color key="backgroundColor" systemColor="systemBackgroundColor"/> + </tableView> + </subviews> + <viewLayoutGuide key="safeArea" id="92E-6T-7K8"/> + <color key="backgroundColor" systemColor="systemBackgroundColor"/> + <constraints> + <constraint firstItem="2vD-BE-HWc" firstAttribute="centerX" secondItem="92E-6T-7K8" secondAttribute="centerX" id="1pL-Dp-xF9"/> + <constraint firstItem="Ljh-0i-iaa" firstAttribute="width" secondItem="92E-6T-7K8" secondAttribute="width" multiplier="0.75" id="2gC-qv-eMT"/> + <constraint firstItem="Vdc-3r-Vit" firstAttribute="leading" secondItem="92E-6T-7K8" secondAttribute="leading" priority="750" constant="16" id="34x-1D-hRd"/> + <constraint firstItem="qzW-bz-5Sc" firstAttribute="width" secondItem="kP7-xY-sZI" secondAttribute="width" id="57h-h4-gv4"/> + <constraint firstItem="92E-6T-7K8" firstAttribute="trailing" secondItem="Vdc-3r-Vit" secondAttribute="trailing" priority="750" constant="16" id="8Qq-Ui-15m"/> + <constraint firstItem="B5X-Rp-rJQ" firstAttribute="leading" secondItem="Vdc-3r-Vit" secondAttribute="leading" priority="750" id="Axx-9r-bZK"/> + <constraint firstItem="kkk-Me-ftz" firstAttribute="leading" secondItem="eab-Lm-VT8" secondAttribute="trailing" constant="13" id="B5A-r8-g3O"/> + <constraint firstItem="kkk-Me-ftz" firstAttribute="centerY" secondItem="eab-Lm-VT8" secondAttribute="centerY" id="F4y-86-A0X"/> + <constraint firstItem="Ljh-0i-iaa" firstAttribute="leading" secondItem="8nh-zG-L49" secondAttribute="leading" id="Gqf-dh-lLi"/> + <constraint firstItem="kP7-xY-sZI" firstAttribute="width" secondItem="BcM-y9-LHg" secondAttribute="width" multiplier="0.97619" id="JH8-ZG-bBW"/> + <constraint firstItem="8nh-zG-L49" firstAttribute="centerY" secondItem="AXU-72-PXy" secondAttribute="centerY" id="LKD-ti-nCh"/> + <constraint firstItem="Vdc-3r-Vit" firstAttribute="centerX" secondItem="92E-6T-7K8" secondAttribute="centerX" id="Ly6-Kr-5Xo"/> + <constraint firstItem="2vD-BE-HWc" firstAttribute="leading" secondItem="92E-6T-7K8" secondAttribute="leading" id="MB5-z7-vMF"/> + <constraint firstItem="eab-Lm-VT8" firstAttribute="leading" secondItem="92E-6T-7K8" secondAttribute="leading" constant="20" id="MxO-nv-lGJ"/> + <constraint firstItem="Vdc-3r-Vit" firstAttribute="top" secondItem="qzW-bz-5Sc" secondAttribute="bottom" constant="25" id="PSC-ml-tcS"/> + <constraint firstItem="8nh-zG-L49" firstAttribute="top" secondItem="Ljh-0i-iaa" secondAttribute="bottom" constant="5" id="Qol-dH-MLq"/> + <constraint firstItem="2vD-BE-HWc" firstAttribute="top" secondItem="92E-6T-7K8" secondAttribute="top" id="Yp5-b8-Ku0"/> + <constraint firstItem="92E-6T-7K8" firstAttribute="trailing" secondItem="2vD-BE-HWc" secondAttribute="trailing" id="aDo-O0-H9n"/> + <constraint firstItem="eab-Lm-VT8" firstAttribute="top" secondItem="AXU-72-PXy" secondAttribute="bottom" constant="5" id="e7y-VA-I1R"/> + <constraint firstItem="B5X-Rp-rJQ" firstAttribute="trailing" secondItem="Vdc-3r-Vit" secondAttribute="trailing" priority="750" id="kBM-uq-858"/> + <constraint firstItem="8nh-zG-L49" firstAttribute="leading" secondItem="AXU-72-PXy" secondAttribute="trailing" constant="10" id="lNn-0J-6u2"/> + <constraint firstItem="B5X-Rp-rJQ" firstAttribute="top" secondItem="Vdc-3r-Vit" secondAttribute="bottom" constant="32" id="rYb-6l-bHt"/> + <constraint firstItem="92E-6T-7K8" firstAttribute="bottom" secondItem="B5X-Rp-rJQ" secondAttribute="bottom" constant="15" id="sBo-bO-iOX"/> + <constraint firstItem="AXU-72-PXy" firstAttribute="top" secondItem="2vD-BE-HWc" secondAttribute="bottom" constant="40" id="zU7-r1-TpF"/> + <constraint firstItem="AXU-72-PXy" firstAttribute="leading" secondItem="92E-6T-7K8" secondAttribute="leading" constant="20" id="zoI-V5-UXe"/> + </constraints> + </view> + <tabBarItem key="tabBarItem" title="Item 2" id="DJT-Sc-9QK"/> + <connections> + <outlet property="awayScore" destination="kkk-Me-ftz" id="bOn-Mp-tSx"/> + <outlet property="customLabel" destination="kP7-xY-sZI" id="Gym-XD-jGO"/> + <outlet property="homeScore" destination="8nh-zG-L49" id="NdE-In-d5O"/> + </connections> + </viewController> + <placeholder placeholderIdentifier="IBFirstResponder" id="6v0-uf-Gbg" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/> + </objects> + <point key="canvasLocation" x="2353.6231884057975" y="470.75892857142856"/> + </scene> + <!--Item 1--> + <scene sceneID="tni-Ks-j0d"> + <objects> + <viewController id="wTF-5l-Qj5" customClass="InGameViewController" customModule="baseball" customModuleProvider="target" sceneMemberID="viewController"> + <view key="view" contentMode="scaleToFill" id="wIJ-AZ-DL5"> + <rect key="frame" x="0.0" y="0.0" width="414" height="896"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="0eV-WE-66E"> + <rect key="frame" x="0.0" y="44" width="414" height="80"/> + <subviews> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="VS" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="pEP-0o-4Ov"> + <rect key="frame" x="193.5" y="28" width="27" height="24"/> + <fontDescription key="fontDescription" type="boldSystem" pointSize="20"/> + <color key="textColor" white="0.33333333329999998" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> + <nil key="highlightedColor"/> + </label> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="N" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="dCB-y9-VBG"> + <rect key="frame" x="149" y="28" width="15" height="24"/> + <fontDescription key="fontDescription" type="boldSystem" pointSize="20"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="N" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ABP-n9-0JK"> + <rect key="frame" x="250" y="28" width="15" height="24"/> + <fontDescription key="fontDescription" type="boldSystem" pointSize="20"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="HOME" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="gsW-7A-bwN"> + <rect key="frame" x="28" y="24.5" width="77.5" height="31.5"/> + <fontDescription key="fontDescription" type="boldSystem" pointSize="26"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="AWAY" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="9Kx-UB-MIm"> + <rect key="frame" x="312" y="24.5" width="74" height="31.5"/> + <fontDescription key="fontDescription" type="boldSystem" pointSize="26"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + </subviews> + <color key="backgroundColor" systemColor="systemBackgroundColor"/> + <constraints> + <constraint firstAttribute="trailing" secondItem="9Kx-UB-MIm" secondAttribute="trailing" constant="28" id="3ax-sf-xgJ"/> + <constraint firstItem="dCB-y9-VBG" firstAttribute="centerY" secondItem="pEP-0o-4Ov" secondAttribute="centerY" id="5NS-xJ-Zpd"/> + <constraint firstItem="gsW-7A-bwN" firstAttribute="centerY" secondItem="0eV-WE-66E" secondAttribute="centerY" id="5d6-DP-wWQ"/> + <constraint firstItem="9Kx-UB-MIm" firstAttribute="leading" relation="lessThanOrEqual" secondItem="ABP-n9-0JK" secondAttribute="trailing" constant="81" id="82Q-gI-tQa"/> + <constraint firstItem="ABP-n9-0JK" firstAttribute="centerY" secondItem="pEP-0o-4Ov" secondAttribute="centerY" id="Cg7-X1-h8h"/> + <constraint firstItem="pEP-0o-4Ov" firstAttribute="centerX" secondItem="0eV-WE-66E" secondAttribute="centerX" id="d1A-A4-BLE"/> + <constraint firstItem="ABP-n9-0JK" firstAttribute="leading" secondItem="pEP-0o-4Ov" secondAttribute="trailing" priority="750" constant="29.5" id="gqG-tk-bZG"/> + <constraint firstItem="dCB-y9-VBG" firstAttribute="leading" relation="lessThanOrEqual" secondItem="gsW-7A-bwN" secondAttribute="trailing" constant="81" id="lFo-yJ-9Sf"/> + <constraint firstItem="pEP-0o-4Ov" firstAttribute="leading" secondItem="dCB-y9-VBG" secondAttribute="trailing" priority="750" constant="29.5" id="lNQ-xy-UXL"/> + <constraint firstAttribute="height" constant="80" id="sVZ-vY-uoy"/> + <constraint firstItem="9Kx-UB-MIm" firstAttribute="centerY" secondItem="0eV-WE-66E" secondAttribute="centerY" id="tlh-40-TzE"/> + <constraint firstItem="gsW-7A-bwN" firstAttribute="leading" secondItem="0eV-WE-66E" secondAttribute="leading" constant="28" id="zOu-X1-sFU"/> + <constraint firstItem="pEP-0o-4Ov" firstAttribute="centerY" secondItem="0eV-WE-66E" secondAttribute="centerY" id="zX0-Ue-r8P"/> + </constraints> + </view> + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="PZl-hv-nvX" customClass="InningInfoView" customModule="baseball" customModuleProvider="target"> + <rect key="frame" x="0.0" y="124" width="414" height="331"/> + <subviews> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="N회초" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="gg0-6b-Og2"> + <rect key="frame" x="355" y="8" width="43" height="21"/> + <constraints> + <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="21" id="RYL-Ih-TQn"/> + <constraint firstAttribute="width" relation="greaterThanOrEqual" constant="42" id="Rbq-w2-4J1"/> + </constraints> + <fontDescription key="fontDescription" type="boldSystem" pointSize="17"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="공격" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="hXo-JN-M4d" userLabel="공격"> + <rect key="frame" x="356" y="30" width="42" height="21"/> + <constraints> + <constraint firstAttribute="width" relation="greaterThanOrEqual" constant="42" id="WwD-xM-Jyb"/> + <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="21" id="jJt-ha-GaA"/> + </constraints> + <fontDescription key="fontDescription" type="boldSystem" pointSize="17"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="S" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="jS5-lR-cBu"> + <rect key="frame" x="20" y="10" width="20" height="30"/> + <constraints> + <constraint firstAttribute="width" constant="20" id="8Aw-bz-rmw"/> + <constraint firstAttribute="height" constant="30" id="KQM-mu-K8T"/> + </constraints> + <fontDescription key="fontDescription" type="boldSystem" pointSize="26"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="B" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="S4c-jc-0rQ"> + <rect key="frame" x="20" y="40" width="20" height="30"/> + <constraints> + <constraint firstAttribute="width" constant="20" id="1eM-kI-ZYw"/> + <constraint firstAttribute="height" constant="30" id="rbj-O6-2hJ"/> + </constraints> + <fontDescription key="fontDescription" type="boldSystem" pointSize="26"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="O" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="eG0-kN-wVl"> + <rect key="frame" x="20" y="70" width="20" height="30"/> + <constraints> + <constraint firstAttribute="height" constant="30" id="2fi-HM-Ap8"/> + <constraint firstAttribute="width" constant="20" id="LFE-bh-R0H"/> + </constraints> + <fontDescription key="fontDescription" type="boldSystem" pointSize="26"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="bGN-OZ-luq"> + <rect key="frame" x="45" y="9" width="70" height="30"/> + <constraints> + <constraint firstAttribute="width" constant="70" id="4Pi-yn-7U9"/> + <constraint firstAttribute="height" constant="30" id="f6d-cS-4wN"/> + </constraints> + </view> + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="EvI-kf-Hj4"> + <rect key="frame" x="45" y="40" width="70" height="30"/> + <constraints> + <constraint firstAttribute="width" constant="70" id="Xqn-2I-jMx"/> + <constraint firstAttribute="height" constant="30" id="vMW-Ci-q4a"/> + </constraints> + </view> + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="pWn-YE-0IR"> + <rect key="frame" x="45" y="70" width="70" height="30"/> + <constraints> + <constraint firstAttribute="width" constant="70" id="N9H-ZR-wTb"/> + <constraint firstAttribute="height" constant="30" id="tdp-Vn-OtQ"/> + </constraints> + </view> + </subviews> + <color key="backgroundColor" systemColor="systemGray4Color"/> + <constraints> + <constraint firstAttribute="trailing" relation="lessThanOrEqual" secondItem="jS5-lR-cBu" secondAttribute="trailing" constant="374" id="3Yi-5N-R97"/> + <constraint firstAttribute="trailing" relation="lessThanOrEqual" secondItem="eG0-kN-wVl" secondAttribute="trailing" constant="374" id="5sS-v8-lzY"/> + <constraint firstItem="hXo-JN-M4d" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="PZl-hv-nvX" secondAttribute="leading" constant="20" symbolic="YES" id="5up-El-LZh"/> + <constraint firstAttribute="trailing" secondItem="gg0-6b-Og2" secondAttribute="trailing" constant="16" id="6z5-pT-QGk"/> + <constraint firstItem="pWn-YE-0IR" firstAttribute="leading" secondItem="eG0-kN-wVl" secondAttribute="trailing" constant="5" id="8qg-EZ-QTa"/> + <constraint firstItem="S4c-jc-0rQ" firstAttribute="top" secondItem="jS5-lR-cBu" secondAttribute="bottom" id="BVN-ep-luT"/> + <constraint firstItem="hXo-JN-M4d" firstAttribute="trailing" secondItem="gg0-6b-Og2" secondAttribute="trailing" id="F8B-2W-w4m"/> + <constraint firstItem="gg0-6b-Og2" firstAttribute="top" secondItem="PZl-hv-nvX" secondAttribute="top" constant="8" id="HV7-sn-A49"/> + <constraint firstItem="EvI-kf-Hj4" firstAttribute="leading" secondItem="S4c-jc-0rQ" secondAttribute="trailing" constant="5" id="Iea-ld-uN0"/> + <constraint firstItem="gg0-6b-Og2" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="PZl-hv-nvX" secondAttribute="leading" constant="20" symbolic="YES" id="O6B-qV-Ud1"/> + <constraint firstItem="S4c-jc-0rQ" firstAttribute="leading" secondItem="PZl-hv-nvX" secondAttribute="leading" constant="20" id="UMY-sE-ccn"/> + <constraint firstAttribute="trailing" relation="lessThanOrEqual" secondItem="S4c-jc-0rQ" secondAttribute="trailing" constant="374" id="WY4-yX-gMc"/> + <constraint firstItem="jS5-lR-cBu" firstAttribute="leading" secondItem="PZl-hv-nvX" secondAttribute="leading" constant="20" id="Z4H-v6-32M"/> + <constraint firstItem="EvI-kf-Hj4" firstAttribute="top" secondItem="bGN-OZ-luq" secondAttribute="bottom" constant="1" id="fYq-CN-KOM"/> + <constraint firstItem="jS5-lR-cBu" firstAttribute="top" secondItem="PZl-hv-nvX" secondAttribute="top" constant="10" id="jkW-2p-TNx"/> + <constraint firstItem="eG0-kN-wVl" firstAttribute="top" secondItem="S4c-jc-0rQ" secondAttribute="bottom" id="oaO-5y-Hcr"/> + <constraint firstAttribute="width" secondItem="PZl-hv-nvX" secondAttribute="height" multiplier="1:0.8" id="pQF-f5-7MD"/> + <constraint firstItem="eG0-kN-wVl" firstAttribute="leading" secondItem="PZl-hv-nvX" secondAttribute="leading" constant="20" id="qRW-5Q-DRI"/> + <constraint firstItem="hXo-JN-M4d" firstAttribute="top" secondItem="gg0-6b-Og2" secondAttribute="bottom" constant="1" id="r6Q-nZ-uLR"/> + <constraint firstItem="bGN-OZ-luq" firstAttribute="leading" secondItem="jS5-lR-cBu" secondAttribute="trailing" constant="5" id="s3A-US-5lU"/> + <constraint firstItem="pWn-YE-0IR" firstAttribute="top" secondItem="EvI-kf-Hj4" secondAttribute="bottom" id="t89-bq-2vh"/> + <constraint firstItem="bGN-OZ-luq" firstAttribute="top" secondItem="PZl-hv-nvX" secondAttribute="top" constant="9" id="wVC-Wr-uyc"/> + </constraints> + <connections> + <outletCollection property="ballCountViews" destination="bGN-OZ-luq" collectionClass="NSMutableArray" id="Y1V-3N-Mvz"/> + <outletCollection property="ballCountViews" destination="EvI-kf-Hj4" collectionClass="NSMutableArray" id="Jiv-EJ-Ygd"/> + <outletCollection property="ballCountViews" destination="pWn-YE-0IR" collectionClass="NSMutableArray" id="XSG-Tv-m67"/> + </connections> + </view> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="투수" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="6h5-X5-6ao"> + <rect key="frame" x="20" y="475" width="39" height="27"/> + <fontDescription key="fontDescription" type="system" pointSize="22"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="투수명" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="hRd-tV-PuL"> + <rect key="frame" x="94" y="475" width="57.5" height="27"/> + <fontDescription key="fontDescription" type="system" pointSize="22"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="던진 공의 갯수" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="UsF-c0-TX5"> + <rect key="frame" x="210.5" y="476.5" width="113.5" height="24"/> + <fontDescription key="fontDescription" type="system" pointSize="20"/> + <color key="textColor" systemColor="systemBlueColor"/> + <nil key="highlightedColor"/> + </label> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="타자명" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2jt-aN-YjW"> + <rect key="frame" x="94" y="522" width="57.5" height="27"/> + <fontDescription key="fontDescription" type="system" pointSize="22"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="타자" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="8XP-2z-uAl"> + <rect key="frame" x="20" y="522" width="39" height="27"/> + <fontDescription key="fontDescription" type="system" pointSize="22"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + <tableView clipsSubviews="YES" contentMode="scaleToFill" fixedFrame="YES" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="hQ6-dm-PD7"> + <rect key="frame" x="2" y="572" width="412" height="241"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> + <color key="backgroundColor" systemColor="systemBackgroundColor"/> + <prototypes> + <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="testcell" id="4Gs-zo-A3H" customClass="testCell" customModule="baseball" customModuleProvider="target"> + <rect key="frame" x="0.0" y="28" width="412" height="43.5"/> + <autoresizingMask key="autoresizingMask"/> + <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="4Gs-zo-A3H" id="Sjs-GZ-LX9"> + <rect key="frame" x="0.0" y="0.0" width="412" height="43.5"/> + <autoresizingMask key="autoresizingMask"/> + <subviews> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="YRK-Nc-zVl"> + <rect key="frame" x="185" y="11" width="42" height="21"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> + <fontDescription key="fontDescription" type="system" pointSize="17"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + </subviews> + </tableViewCellContentView> + <connections> + <outlet property="test1" destination="YRK-Nc-zVl" id="eTP-Ke-kxd"/> + </connections> + </tableViewCell> + </prototypes> + </tableView> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="타자 실적" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="iwh-Cy-2TQ"> + <rect key="frame" x="210.5" y="523.5" width="74.5" height="24"/> + <fontDescription key="fontDescription" type="system" pointSize="20"/> + <color key="textColor" systemColor="linkColor"/> + <nil key="highlightedColor"/> + </label> + </subviews> + <viewLayoutGuide key="safeArea" id="quc-Ml-xnv"/> + <color key="backgroundColor" systemColor="systemBackgroundColor"/> + <constraints> + <constraint firstItem="8XP-2z-uAl" firstAttribute="leading" secondItem="quc-Ml-xnv" secondAttribute="leading" constant="20" id="4tl-U1-YLj"/> + <constraint firstItem="hRd-tV-PuL" firstAttribute="centerY" secondItem="UsF-c0-TX5" secondAttribute="centerY" id="7Rr-KB-c7r"/> + <constraint firstItem="hRd-tV-PuL" firstAttribute="leading" secondItem="6h5-X5-6ao" secondAttribute="trailing" constant="35" id="D7f-sf-nAa"/> + <constraint firstItem="UsF-c0-TX5" firstAttribute="leading" relation="lessThanOrEqual" secondItem="hRd-tV-PuL" secondAttribute="trailing" constant="59" id="Fbh-cJ-dkO"/> + <constraint firstItem="iwh-Cy-2TQ" firstAttribute="leading" secondItem="UsF-c0-TX5" secondAttribute="leading" id="J52-x3-vN2"/> + <constraint firstItem="quc-Ml-xnv" firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="UsF-c0-TX5" secondAttribute="trailing" constant="10" id="MSa-Bp-gfb"/> + <constraint firstItem="2jt-aN-YjW" firstAttribute="centerY" secondItem="iwh-Cy-2TQ" secondAttribute="centerY" id="Nli-qH-RrP"/> + <constraint firstItem="8XP-2z-uAl" firstAttribute="top" secondItem="6h5-X5-6ao" secondAttribute="bottom" constant="20" id="O7F-S6-ICp"/> + <constraint firstItem="PZl-hv-nvX" firstAttribute="centerX" secondItem="quc-Ml-xnv" secondAttribute="centerX" id="P9X-7m-IOp"/> + <constraint firstItem="iwh-Cy-2TQ" firstAttribute="leading" relation="lessThanOrEqual" secondItem="2jt-aN-YjW" secondAttribute="trailing" constant="59" id="VWs-Xy-VZa"/> + <constraint firstItem="6h5-X5-6ao" firstAttribute="leading" secondItem="quc-Ml-xnv" secondAttribute="leading" constant="20" id="WEu-FE-Z6n"/> + <constraint firstItem="6h5-X5-6ao" firstAttribute="top" secondItem="PZl-hv-nvX" secondAttribute="bottom" constant="20" id="cdL-7T-bMy"/> + <constraint firstItem="0eV-WE-66E" firstAttribute="centerX" secondItem="quc-Ml-xnv" secondAttribute="centerX" id="d3X-2k-cu0"/> + <constraint firstItem="quc-Ml-xnv" firstAttribute="trailing" relation="lessThanOrEqual" secondItem="iwh-Cy-2TQ" secondAttribute="trailing" constant="129" id="gJh-KB-Lcw"/> + <constraint firstItem="0eV-WE-66E" firstAttribute="top" secondItem="quc-Ml-xnv" secondAttribute="top" id="ihB-ye-9G0"/> + <constraint firstItem="2jt-aN-YjW" firstAttribute="leading" secondItem="8XP-2z-uAl" secondAttribute="trailing" constant="35" id="jz0-sZ-hmY"/> + <constraint firstItem="0eV-WE-66E" firstAttribute="width" secondItem="quc-Ml-xnv" secondAttribute="width" id="oUO-tQ-Ryp"/> + <constraint firstItem="PZl-hv-nvX" firstAttribute="firstBaseline" secondItem="0eV-WE-66E" secondAttribute="baseline" id="oZs-h2-8jd"/> + <constraint firstItem="2jt-aN-YjW" firstAttribute="centerY" secondItem="8XP-2z-uAl" secondAttribute="centerY" id="qdt-h5-Kgn"/> + <constraint firstItem="6h5-X5-6ao" firstAttribute="centerY" secondItem="hRd-tV-PuL" secondAttribute="centerY" id="tXp-BK-EvK"/> + <constraint firstItem="PZl-hv-nvX" firstAttribute="leading" secondItem="0eV-WE-66E" secondAttribute="leading" id="y0W-cZ-pUf"/> + </constraints> + </view> + <tabBarItem key="tabBarItem" title="Item 1" id="zU1-Im-sE3"/> + <connections> + <outlet property="inningInfoView" destination="PZl-hv-nvX" id="RqU-6q-BME"/> + <outlet property="pitchingHistoryTableView" destination="hQ6-dm-PD7" id="EsK-47-VFt"/> + </connections> + </viewController> + <placeholder placeholderIdentifier="IBFirstResponder" id="u6l-Ur-fsn" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/> + </objects> + <point key="canvasLocation" x="2353.6231884057975" y="-175.44642857142856"/> + </scene> + <!--Tab Bar Controller--> + <scene sceneID="AiX-tu-cDB"> + <objects> + <tabBarController id="xVD-pq-WX1" sceneMemberID="viewController"> + <navigationItem key="navigationItem" id="ECQ-dc-4Zh"/> + <tabBar key="tabBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="gl4-vi-cCD"> + <rect key="frame" x="0.0" y="0.0" width="414" height="49"/> + <autoresizingMask key="autoresizingMask"/> + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> + </tabBar> + <connections> + <segue destination="wTF-5l-Qj5" kind="relationship" relationship="viewControllers" id="rhQ-f9-pya"/> + <segue destination="jNJ-h5-3qc" kind="relationship" relationship="viewControllers" id="Zp4-0v-XPS"/> + </connections> + </tabBarController> + <placeholder placeholderIdentifier="IBFirstResponder" id="du4-kF-Rse" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/> + </objects> + <point key="canvasLocation" x="1175" y="126"/> + </scene> + </scenes> + <resources> + <systemColor name="linkColor"> + <color red="0.0" green="0.47843137254901963" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> + </systemColor> + <systemColor name="systemBackgroundColor"> + <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> + </systemColor> + <systemColor name="systemBlueColor"> + <color red="0.0" green="0.47843137254901963" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> + </systemColor> + <systemColor name="systemGray4Color"> + <color red="0.81960784313725488" green="0.81960784313725488" blue="0.83921568627450982" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> + </systemColor> + <systemColor name="systemRedColor"> + <color red="1" green="0.23137254901960785" blue="0.18823529411764706" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> + </systemColor> + </resources> +</document> diff --git a/iOS/baseball/baseball/Controller/GameSelectViewController.swift b/iOS/baseball/baseball/Controller/GameSelectViewController.swift new file mode 100644 index 000000000..409967956 --- /dev/null +++ b/iOS/baseball/baseball/Controller/GameSelectViewController.swift @@ -0,0 +1,81 @@ +// +// ViewController.swift +// baseball +// +// Created by 박정하 on 2021/05/03. +// + +import UIKit + +class GameSelectViewController: UIViewController, GameSelectViewControllerManageable{ + + @IBOutlet weak var matchupCell: MatchUpCell! + private let networkManager: NetworkManager + + override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) { + self.networkManager = NetworkManager() + super.init(nibName: nil, bundle: nil) + } + + required init?(coder: NSCoder) { + self.networkManager = NetworkManager() + super.init(coder: coder) + } + + override func loadView() { + super.loadView() + self.matchupCell.set(delegate: self) + self.networkManager.requestbaseballGame(url: URLManager.get(url: .gameList), httpMethod: .get) { result in + print(result) + } + playOpacityAnimation() + playMoveAnimation() + } + + override func viewDidLoad() { + super.viewDidLoad() + } + + func moveToGameView() { + self.performSegue(withIdentifier: "toInGame", sender: nil) + } + + private func playOpacityAnimation() -> Void { + let layerWidth = view.bounds.size.width / 4 + let myCalayer : CALayer = { + let calayer = CALayer() + calayer.bounds = CGRect(x: 0, y: 0, width: layerWidth, height: layerWidth) + calayer.position = CGPoint(x: view.bounds.size.width / 2 , y: layerWidth) + calayer.backgroundColor = UIColor.black.cgColor + return calayer + }() + view.layer.addSublayer(myCalayer) + let animation: CABasicAnimation = CABasicAnimation(keyPath: "opacity") + animation.fromValue = 1 + animation.toValue = 0 + animation.duration = 1 + animation.repeatCount = 10 // + myCalayer.add(animation, forKey: "GoRed") + myCalayer.opacity = 0 + } + + private func playMoveAnimation() -> Void { + + let layerWidth = view.bounds.size.width / 4 + let myCalayer : CALayer = { + let calayer = CALayer() + calayer.bounds = CGRect(x: 0, y: 0, width: layerWidth, height: layerWidth) + calayer.position = CGPoint(x: view.bounds.size.width / 2 , y: layerWidth) + calayer.backgroundColor = UIColor.black.cgColor + return calayer + }() + view.layer.addSublayer(myCalayer) + let animation: CABasicAnimation = CABasicAnimation(keyPath: "position") + animation.fromValue = myCalayer.position + animation.toValue = CGPoint(x: myCalayer.position.x, y: view.bounds.size.height - view.bounds.size.width / 4) + animation.duration = 1 + myCalayer.add(animation, forKey: "move down") +// myCalayer.position = CGPoint(x: myCalayer.position.x, y: view.bounds.size.height - view.bounds.size.width / 4) + } +} + diff --git a/iOS/baseball/baseball/Controller/InGameViewController.swift b/iOS/baseball/baseball/Controller/InGameViewController.swift new file mode 100644 index 000000000..4cc76f258 --- /dev/null +++ b/iOS/baseball/baseball/Controller/InGameViewController.swift @@ -0,0 +1,23 @@ +// +// InGameViewController.swift +// baseball +// +// Created by 박정하 on 2021/05/04. +// + +import UIKit + +class InGameViewController: UIViewController { + + @IBOutlet weak var pitchingHistoryTableView: UITableView! + @IBOutlet weak var inningInfoView: InningInfoView! + + private var dataSource = PitchingHistoryDataSource() + + override func viewDidLoad() { + super.viewDidLoad() + dataSource.setupDataSource(tableView: pitchingHistoryTableView) + self.inningInfoView.applyBallCount(strike: 1, ball: 2, out: 1) + } +} + diff --git a/iOS/baseball/baseball/Controller/ScoreViewController.swift b/iOS/baseball/baseball/Controller/ScoreViewController.swift new file mode 100644 index 000000000..77c5b8053 --- /dev/null +++ b/iOS/baseball/baseball/Controller/ScoreViewController.swift @@ -0,0 +1,20 @@ +// +// ScoreViewController.swift +// baseball +// +// Created by 박정하 on 2021/05/04. +// + +import UIKit + +class ScoreViewController: UIViewController { + @IBOutlet weak var homeScore: UIStackView! + @IBOutlet weak var awayScore: UIStackView! + @IBOutlet weak var customLabel: UILabel! + + private var tempInt: Int = 0 //뷰가 추가되는 효과를 보기 위한 임시 변수 + + func isAttack(myTeam: MyTeam) -> Bool { + return myTeam.Value == InningInfo().attackTeam + } +} diff --git a/iOS/baseball/baseball/Info.plist b/iOS/baseball/baseball/Info.plist new file mode 100644 index 000000000..5b531f7b2 --- /dev/null +++ b/iOS/baseball/baseball/Info.plist @@ -0,0 +1,66 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>CFBundleDevelopmentRegion</key> + <string>$(DEVELOPMENT_LANGUAGE)</string> + <key>CFBundleExecutable</key> + <string>$(EXECUTABLE_NAME)</string> + <key>CFBundleIdentifier</key> + <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> + <key>CFBundleInfoDictionaryVersion</key> + <string>6.0</string> + <key>CFBundleName</key> + <string>$(PRODUCT_NAME)</string> + <key>CFBundlePackageType</key> + <string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string> + <key>CFBundleShortVersionString</key> + <string>1.0</string> + <key>CFBundleVersion</key> + <string>1</string> + <key>LSRequiresIPhoneOS</key> + <true/> + <key>UIApplicationSceneManifest</key> + <dict> + <key>UIApplicationSupportsMultipleScenes</key> + <false/> + <key>UISceneConfigurations</key> + <dict> + <key>UIWindowSceneSessionRoleApplication</key> + <array> + <dict> + <key>UISceneConfigurationName</key> + <string>Default Configuration</string> + <key>UISceneDelegateClassName</key> + <string>$(PRODUCT_MODULE_NAME).SceneDelegate</string> + <key>UISceneStoryboardFile</key> + <string>Main</string> + </dict> + </array> + </dict> + </dict> + <key>UIApplicationSupportsIndirectInputEvents</key> + <true/> + <key>UILaunchStoryboardName</key> + <string>LaunchScreen</string> + <key>UIMainStoryboardFile</key> + <string>Main</string> + <key>UIRequiredDeviceCapabilities</key> + <array> + <string>armv7</string> + </array> + <key>UISupportedInterfaceOrientations</key> + <array> + <string>UIInterfaceOrientationPortrait</string> + <string>UIInterfaceOrientationLandscapeLeft</string> + <string>UIInterfaceOrientationLandscapeRight</string> + </array> + <key>UISupportedInterfaceOrientations~ipad</key> + <array> + <string>UIInterfaceOrientationPortrait</string> + <string>UIInterfaceOrientationPortraitUpsideDown</string> + <string>UIInterfaceOrientationLandscapeLeft</string> + <string>UIInterfaceOrientationLandscapeRight</string> + </array> +</dict> +</plist> diff --git a/iOS/baseball/baseball/Model/DTO/BaseballGameDTO.swift b/iOS/baseball/baseball/Model/DTO/BaseballGameDTO.swift new file mode 100644 index 000000000..a946e9905 --- /dev/null +++ b/iOS/baseball/baseball/Model/DTO/BaseballGameDTO.swift @@ -0,0 +1,24 @@ +// +// BaseballGameDTO.swift +// baseball +// +// Created by 박정하 on 2021/05/06. +// + +import Foundation + +struct GameDTO: Decodable { + let homeTeam: TeamDTO + let awayTeam: TeamDTO + + let inning: Int + let state: String + let batter: Int + let strike: Int + let ball: Int + let out: Int + + let baseState: [Bool] + let history: [PitchingHistory] + let inningScore: InningScore +} diff --git a/iOS/baseball/baseball/Model/DTO/TeamDTO.swift b/iOS/baseball/baseball/Model/DTO/TeamDTO.swift new file mode 100644 index 000000000..2df87aa19 --- /dev/null +++ b/iOS/baseball/baseball/Model/DTO/TeamDTO.swift @@ -0,0 +1,15 @@ +// +// Team.swift +// baseball +// +// Created by 박정하 on 2021/05/06. +// + +import Foundation + +struct TeamDTO: Decodable { + let name: String + let score: Int + let player: [Player] + let pitcher: Pitcher +} diff --git a/iOS/baseball/baseball/Model/Entity/BaseState.swift b/iOS/baseball/baseball/Model/Entity/BaseState.swift new file mode 100644 index 000000000..f47c50bc6 --- /dev/null +++ b/iOS/baseball/baseball/Model/Entity/BaseState.swift @@ -0,0 +1,16 @@ +// +// BaseState.swift +// baseball +// +// Created by 박정하 on 2021/05/07. +// + +import Foundation + +class BaseState { + var baseState: [Bool] + + init(){ + baseState = [] + } +} diff --git a/iOS/baseball/baseball/Model/Entity/Game.swift b/iOS/baseball/baseball/Model/Entity/Game.swift new file mode 100644 index 000000000..7f8a6b3d2 --- /dev/null +++ b/iOS/baseball/baseball/Model/Entity/Game.swift @@ -0,0 +1,11 @@ + +import Foundation + +struct Game { + private(set) var myTeam: MyTeam + private var home: Team + private var away: Team + private var inningInfo: InningInfo + private var inningScores: InningScore + private var baseState: BaseState +} diff --git a/iOS/baseball/baseball/Model/Entity/InningInfo.swift b/iOS/baseball/baseball/Model/Entity/InningInfo.swift new file mode 100644 index 000000000..a56d0d5fc --- /dev/null +++ b/iOS/baseball/baseball/Model/Entity/InningInfo.swift @@ -0,0 +1,22 @@ + +import Foundation + +struct InningInfo { + private var currentInning: Int + private(set) var attackTeam: String //ScoreViewController isAttack함수를 사용하기 위해서 임시 컨트롤 access + private var batter: Int + private var strike: Int + private var ball: Int + private var out: Int + private var pitchingHistory: PitchingHistory + + init() { + self.currentInning = 0 + self.attackTeam = "" + self.batter = 0 + self.strike = 0 + self.ball = 0 + self.out = 0 + self.pitchingHistory = PitchingHistory() + } +} diff --git a/iOS/baseball/baseball/Model/Entity/InningScore.swift b/iOS/baseball/baseball/Model/Entity/InningScore.swift new file mode 100644 index 000000000..506f2aff1 --- /dev/null +++ b/iOS/baseball/baseball/Model/Entity/InningScore.swift @@ -0,0 +1,12 @@ + +import Foundation + +struct InningScore: Decodable { + private var homeScore: [Int] + private var awayScore: [Int] + + init() { + self.homeScore = [] + self.awayScore = [] + } +} diff --git a/iOS/baseball/baseball/Model/Entity/MyTeam.swift b/iOS/baseball/baseball/Model/Entity/MyTeam.swift new file mode 100644 index 000000000..367aef8ce --- /dev/null +++ b/iOS/baseball/baseball/Model/Entity/MyTeam.swift @@ -0,0 +1,17 @@ +// +// MyState.swift +// baseball +// +// Created by 박정하 on 2021/05/07. +// + +import Foundation + +enum MyTeam: String { + case Home + case Away + + var Value: String { + return rawValue + } +} diff --git a/iOS/baseball/baseball/Model/Entity/Pitcher.swift b/iOS/baseball/baseball/Model/Entity/Pitcher.swift new file mode 100644 index 000000000..073fbeec1 --- /dev/null +++ b/iOS/baseball/baseball/Model/Entity/Pitcher.swift @@ -0,0 +1,12 @@ + +import Foundation + +struct Pitcher:Decodable { + private var playerNumber: Int + private var pitches: Int + + init() { + self.playerNumber = 0 + self.pitches = 0 + } +} diff --git a/iOS/baseball/baseball/Model/Entity/PitchingHistory.swift b/iOS/baseball/baseball/Model/Entity/PitchingHistory.swift new file mode 100644 index 000000000..73db052b6 --- /dev/null +++ b/iOS/baseball/baseball/Model/Entity/PitchingHistory.swift @@ -0,0 +1,12 @@ + +import Foundation + +struct PitchingHistory:Decodable { + private var pitch: String + private var status: String + + init() { + self.pitch = "" + self.status = "" + } +} diff --git a/iOS/baseball/baseball/Model/Entity/Player.swift b/iOS/baseball/baseball/Model/Entity/Player.swift new file mode 100644 index 000000000..b44312a7f --- /dev/null +++ b/iOS/baseball/baseball/Model/Entity/Player.swift @@ -0,0 +1,18 @@ + +import Foundation + +struct Player: Decodable { + private let name: String + private var atBat: Int + private var hits: Int + private var out: Int + private var average: Float + + init(name: String) { + self.name = name + self.atBat = 0 + self.hits = 0 + self.out = 0 + self.average = 0 + } +} diff --git a/iOS/baseball/baseball/Model/Entity/Players.swift b/iOS/baseball/baseball/Model/Entity/Players.swift new file mode 100644 index 000000000..fa6d0668e --- /dev/null +++ b/iOS/baseball/baseball/Model/Entity/Players.swift @@ -0,0 +1,10 @@ + +import Foundation + +struct Players: Decodable { + private var players: [Player] + + init() { + self.players = [] + } +} diff --git a/iOS/baseball/baseball/Model/Entity/Team.swift b/iOS/baseball/baseball/Model/Entity/Team.swift new file mode 100644 index 000000000..43d640330 --- /dev/null +++ b/iOS/baseball/baseball/Model/Entity/Team.swift @@ -0,0 +1,16 @@ + +import Foundation + +struct Team { + private let name: String + private var score: Int + private var players: Players + private var pitcher: Pitcher + + init(name: String) { + self.name = name + self.score = 0 + self.players = Players() + self.pitcher = Pitcher() + } +} diff --git a/iOS/baseball/baseball/Network/NetworkManager.swift b/iOS/baseball/baseball/Network/NetworkManager.swift new file mode 100644 index 000000000..426835cf9 --- /dev/null +++ b/iOS/baseball/baseball/Network/NetworkManager.swift @@ -0,0 +1,57 @@ +// +// NetworkManager.swift +// baseball +// +// Created by 박정하 on 2021/05/05. +// + +import Foundation + +struct NetworkManager { + + enum requestScene: String { + case gameList = "" + + var value: String { + return rawValue + } + } + + enum NetworkError: Error { + case nilResponse + case badResponse + } + + enum httpMethod: String { + case get = "GET" + case post = "POST" + + var value: String { + return rawValue + } + } + + func requestbaseballGame(url: URL?, httpMethod: NetworkManager.httpMethod, completion : @escaping (Result<Int, NetworkError>) -> Void) -> Void{ + guard let makedURL: URL = url else { return } + var request: URLRequest = URLRequest.init(url: makedURL) + + request.httpMethod = httpMethod.value + + URLSession.shared.dataTask(with: request) { data, response, error in + let responseResult = self.checkResponse(response: response) + completion(responseResult) + }.resume() + } + + private func checkResponse(response: URLResponse?) -> Result<Int,NetworkError> { + guard let isresponse = response as? HTTPURLResponse else { + return .failure(NetworkError.nilResponse) + } + + if isresponse.statusCode != 200 { + return .failure(NetworkError.badResponse) + } + + return .success(200) + } +} diff --git a/iOS/baseball/baseball/Network/URLManager.swift b/iOS/baseball/baseball/Network/URLManager.swift new file mode 100644 index 000000000..e6722717b --- /dev/null +++ b/iOS/baseball/baseball/Network/URLManager.swift @@ -0,0 +1,16 @@ + +import Foundation + +struct URLManager { + enum Url: String { + case gameList = "" + } + + static func get(url: Url) -> URL? { + guard let url = URL(string: url.rawValue) else { + print("The URL is inappropriate.") + return nil + } + return url + } +} diff --git a/iOS/baseball/baseball/Protocols/GameSelectViewControllerManageable.swift b/iOS/baseball/baseball/Protocols/GameSelectViewControllerManageable.swift new file mode 100644 index 000000000..c1c0a32d6 --- /dev/null +++ b/iOS/baseball/baseball/Protocols/GameSelectViewControllerManageable.swift @@ -0,0 +1,12 @@ +// +// GameSelectViewControllerManageable.swift +// baseball +// +// Created by 박정하 on 2021/05/03. +// + +import Foundation + +protocol GameSelectViewControllerManageable { + func moveToGameView() -> Void +} diff --git a/iOS/baseball/baseball/SceneDelegate.swift b/iOS/baseball/baseball/SceneDelegate.swift new file mode 100644 index 000000000..6aee03564 --- /dev/null +++ b/iOS/baseball/baseball/SceneDelegate.swift @@ -0,0 +1,52 @@ +// +// SceneDelegate.swift +// baseball +// +// Created by 박정하 on 2021/05/03. +// + +import UIKit + +class SceneDelegate: UIResponder, UIWindowSceneDelegate { + + var window: UIWindow? + + + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { + // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. + // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. + // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). + guard let _ = (scene as? UIWindowScene) else { return } + } + + func sceneDidDisconnect(_ scene: UIScene) { + // Called as the scene is being released by the system. + // This occurs shortly after the scene enters the background, or when its session is discarded. + // Release any resources associated with this scene that can be re-created the next time the scene connects. + // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead). + } + + func sceneDidBecomeActive(_ scene: UIScene) { + // Called when the scene has moved from an inactive state to an active state. + // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. + } + + func sceneWillResignActive(_ scene: UIScene) { + // Called when the scene will move from an active state to an inactive state. + // This may occur due to temporary interruptions (ex. an incoming phone call). + } + + func sceneWillEnterForeground(_ scene: UIScene) { + // Called as the scene transitions from the background to the foreground. + // Use this method to undo the changes made on entering the background. + } + + func sceneDidEnterBackground(_ scene: UIScene) { + // Called as the scene transitions from the foreground to the background. + // Use this method to save data, release shared resources, and store enough scene-specific state information + // to restore the scene back to its current state. + } + + +} + diff --git a/iOS/baseball/baseball/View/InningInfoView.swift b/iOS/baseball/baseball/View/InningInfoView.swift new file mode 100644 index 000000000..d4038e5dc --- /dev/null +++ b/iOS/baseball/baseball/View/InningInfoView.swift @@ -0,0 +1,58 @@ + +import UIKit + +class InningInfoView: UIView { + @IBOutlet var ballCountViews: [UIView]! + + override func awakeFromNib() { + super.awakeFromNib() + self.drawEmptyBallCount() + } + + func drawEmptyBallCount() { + let repeatCount = [2, 3, 2] + let inset: CGFloat = 3 + let ballWidth: CGFloat = 23 + let locationX = ballWidth / 2 + + for viewIndex in 0..<ballCountViews.count { + let locationY = ballCountViews[viewIndex].frame.height / 2 + for index in 0..<repeatCount[viewIndex] { + let emptyCircle = drawCircle() + emptyCircle.position = CGPoint(x: locationX + ballWidth * CGFloat(index) + inset * CGFloat(index), y: locationY) + ballCountViews[viewIndex].layer.addSublayer(emptyCircle) + } + } + } + + func drawCircle() -> CALayer { + let ballWidth = 23 + let circle = CALayer() + circle.bounds = CGRect(origin: CGPoint(x: 0, y: 0), size: CGSize(width: ballWidth, height: ballWidth)) + circle.backgroundColor = UIColor.systemGray4.cgColor + circle.cornerRadius = 11 + circle.borderWidth = 1 + circle.borderColor = UIColor.gray.cgColor + return circle + } + + func applyBallCount(strike: Int, ball: Int, out: Int) { + for index in 0..<strike { + if let emptyBall = self.ballCountViews[0].layer.sublayers?[index] { + emptyBall.backgroundColor = UIColor.systemYellow.cgColor + } + } + + for index in 0..<ball { + if let emptyBall = self.ballCountViews[1].layer.sublayers?[index] { + emptyBall.backgroundColor = UIColor.systemGreen.cgColor + } + } + + for index in 0..<out { + if let emptyBall = self.ballCountViews[2].layer.sublayers?[index] { + emptyBall.backgroundColor = UIColor.systemRed.cgColor + } + } + } +} diff --git a/iOS/baseball/baseball/View/MatchUpCell.swift b/iOS/baseball/baseball/View/MatchUpCell.swift new file mode 100644 index 000000000..bf1aeb5e1 --- /dev/null +++ b/iOS/baseball/baseball/View/MatchUpCell.swift @@ -0,0 +1,42 @@ +// +// MatchUpCell.swift +// baseball +// +// Created by 박정하 on 2021/05/03. +// + +import UIKit + +class MatchUpCell: UIView { + + @IBOutlet weak var homeLabel: UILabel! + @IBOutlet weak var awayLabel: UILabel! + @IBOutlet weak var gameNumber: UILabel! + + private var delegate: GameSelectViewControllerManageable! + + override init(frame: CGRect) { + super.init(frame: frame) + } + + //storyBoard!! + required init?(coder: NSCoder) { + super.init(coder: coder) + let tapGesture = UITapGestureRecognizer(target: self, action: #selector(didTapCell(_:))) + self.addGestureRecognizer(tapGesture) + } + + internal func set(delegate: GameSelectViewControllerManageable){ + self.delegate = delegate + } + + @objc private func didTapCell(_ gesture: UITapGestureRecognizer) { + self.delegate.moveToGameView() + } + + internal func updateCellLabel(homeTeam: String, awayTeam: String, gameNumber: String) { + self.homeLabel.text = homeTeam + self.awayLabel.text = awayTeam + self.gameNumber.text = gameNumber + } +} diff --git a/iOS/baseball/baseball/View/PitchingHistoryDataSource.swift b/iOS/baseball/baseball/View/PitchingHistoryDataSource.swift new file mode 100644 index 000000000..b9bc858a5 --- /dev/null +++ b/iOS/baseball/baseball/View/PitchingHistoryDataSource.swift @@ -0,0 +1,36 @@ +// +// PitchingHistoryDataSource.swift +// baseball +// +// Created by user on 2021/05/06. +// + +import UIKit + +class PitchingHistoryDataSource { + + private var dataSource: UITableViewDiffableDataSource<String, String>! + + func setupDataSource(tableView: UITableView) -> Void { + self.dataSource = UITableViewDiffableDataSource<String, String>(tableView: tableView, cellProvider: { (tableView, indexPath, string) -> UITableViewCell? in + let cell = tableView.dequeueReusableCell(withIdentifier: "testcell") as! testCell + cell.test1.text = string + return cell + }) + var snapshot = self.dataSource.snapshot() + snapshot.appendSections(["1"]) + self.dataSource.apply(snapshot) + } + + func applySnapshot(string: String) { + var snapshot = self.dataSource.snapshot() + let items = snapshot.itemIdentifiers(inSection: "1") + if items.count == 0 { + snapshot.appendItems([string], toSection: "1") + } else { + snapshot.insertItems([string], beforeItem: items[0]) + } + + self.dataSource.apply(snapshot) + } +} diff --git a/iOS/baseball/baseball/View/testCell.swift b/iOS/baseball/baseball/View/testCell.swift new file mode 100644 index 000000000..7acd1539f --- /dev/null +++ b/iOS/baseball/baseball/View/testCell.swift @@ -0,0 +1,12 @@ +// +// testCell.swift +// baseball +// +// Created by user on 2021/05/06. +// + +import UIKit + +class testCell: UITableViewCell { + @IBOutlet weak var test1: UILabel! +}