فهرست منبع

初始化项目版本

RONG 1 سال پیش
کامیت
39b01442df
100فایلهای تغییر یافته به همراه4433 افزوده شده و 0 حذف شده
  1. 2047 0
      JSJPCoach.xcodeproj/project.pbxproj
  2. 7 0
      JSJPCoach.xcodeproj/project.xcworkspace/contents.xcworkspacedata
  3. BIN
      JSJPCoach.xcodeproj/project.xcworkspace/xcuserdata/apple.xcuserdatad/UserInterfaceState.xcuserstate
  4. 5 0
      JSJPCoach.xcodeproj/xcuserdata/apple.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
  5. 111 0
      JSJPCoach.xcodeproj/xcuserdata/apple.xcuserdatad/xcschemes/JSJPCoach.xcscheme
  6. 32 0
      JSJPCoach.xcodeproj/xcuserdata/apple.xcuserdatad/xcschemes/xcschememanagement.plist
  7. 19 0
      JSJPCoach.xcodeproj/xcuserdata/zhangrong.xcuserdatad/xcschemes/xcschememanagement.plist
  8. 10 0
      JSJPCoach.xcworkspace/contents.xcworkspacedata
  9. 8 0
      JSJPCoach.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
  10. BIN
      JSJPCoach.xcworkspace/xcuserdata/apple.xcuserdatad/UserInterfaceState.xcuserstate
  11. 5 0
      JSJPCoach.xcworkspace/xcuserdata/apple.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
  12. 5 0
      JSJPCoach.xcworkspace/xcuserdata/echoshacolee.xcuserdatad/IDEFindNavigatorScopes.plist
  13. BIN
      JSJPCoach.xcworkspace/xcuserdata/echoshacolee.xcuserdatad/UserInterfaceState.xcuserstate
  14. 55 0
      JSJPCoach.xcworkspace/xcuserdata/echoshacolee.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
  15. 5 0
      JSJPCoach.xcworkspace/xcuserdata/zhangrong.xcuserdatad/IDEFindNavigatorScopes.plist
  16. BIN
      JSJPCoach.xcworkspace/xcuserdata/zhangrong.xcuserdatad/UserInterfaceState.xcuserstate
  17. 67 0
      JSJPCoach.xcworkspace/xcuserdata/zhangrong.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
  18. 27 0
      JSJPCoach/AFDescribeObj.h
  19. 73 0
      JSJPCoach/AFDescribeObj.m
  20. 19 0
      JSJPCoach/AFView.h
  21. 232 0
      JSJPCoach/AFView.m
  22. 76 0
      JSJPCoach/ActivityView.h
  23. 287 0
      JSJPCoach/ActivityView.mm
  24. 58 0
      JSJPCoach/AppDelegate.h
  25. 604 0
      JSJPCoach/AppDelegate.m
  26. BIN
      JSJPCoach/Assets.xcassets/001.imageset/001.png
  27. 21 0
      JSJPCoach/Assets.xcassets/001.imageset/Contents.json
  28. BIN
      JSJPCoach/Assets.xcassets/AliPay.imageset/146621846347974559.png
  29. 21 0
      JSJPCoach/Assets.xcassets/AliPay.imageset/Contents.json
  30. 62 0
      JSJPCoach/Assets.xcassets/AppIcon.appiconset/Contents.json
  31. BIN
      JSJPCoach/Assets.xcassets/AppIcon.appiconset/ln_Coa.png
  32. BIN
      JSJPCoach/Assets.xcassets/AppIcon.appiconset/ln_CoaiPhoneApp_60pt@2x.png
  33. BIN
      JSJPCoach/Assets.xcassets/AppIcon.appiconset/ln_CoaiPhoneApp_60pt@3x.png
  34. BIN
      JSJPCoach/Assets.xcassets/AppIcon.appiconset/ln_CoaiPhoneNotification_20pt@2x.png
  35. BIN
      JSJPCoach/Assets.xcassets/AppIcon.appiconset/ln_CoaiPhoneNotification_20pt@3x.png
  36. BIN
      JSJPCoach/Assets.xcassets/AppIcon.appiconset/ln_CoaiPhoneSpootlight5_29pt@2x.png
  37. BIN
      JSJPCoach/Assets.xcassets/AppIcon.appiconset/ln_CoaiPhoneSpootlight5_29pt@3x.png
  38. BIN
      JSJPCoach/Assets.xcassets/AppIcon.appiconset/ln_CoaiPhoneSpootlight7_40pt@2x.png
  39. BIN
      JSJPCoach/Assets.xcassets/AppIcon.appiconset/ln_CoaiPhoneSpootlight7_40pt@3x.png
  40. 6 0
      JSJPCoach/Assets.xcassets/Contents.json
  41. 6 0
      JSJPCoach/Assets.xcassets/HomeVC/Contents.json
  42. 21 0
      JSJPCoach/Assets.xcassets/HomeVC/bgImage.imageset/Contents.json
  43. BIN
      JSJPCoach/Assets.xcassets/HomeVC/bgImage.imageset/bg.png
  44. 21 0
      JSJPCoach/Assets.xcassets/HomeVC/carIcon.imageset/Contents.json
  45. BIN
      JSJPCoach/Assets.xcassets/HomeVC/carIcon.imageset/ic_teach_normal.png
  46. 21 0
      JSJPCoach/Assets.xcassets/HomeVC/img1.imageset/Contents.json
  47. BIN
      JSJPCoach/Assets.xcassets/HomeVC/img1.imageset/ic_teach_log.png
  48. 21 0
      JSJPCoach/Assets.xcassets/HomeVC/img10.imageset/Contents.json
  49. BIN
      JSJPCoach/Assets.xcassets/HomeVC/img10.imageset/培训.png
  50. 21 0
      JSJPCoach/Assets.xcassets/HomeVC/img11.imageset/Contents.json
  51. BIN
      JSJPCoach/Assets.xcassets/HomeVC/img11.imageset/报修.png
  52. 21 0
      JSJPCoach/Assets.xcassets/HomeVC/img12.imageset/Contents.json
  53. BIN
      JSJPCoach/Assets.xcassets/HomeVC/img12.imageset/联系我们.png
  54. 21 0
      JSJPCoach/Assets.xcassets/HomeVC/img2.imageset/Contents.json
  55. BIN
      JSJPCoach/Assets.xcassets/HomeVC/img2.imageset/ic_my_students.png
  56. 21 0
      JSJPCoach/Assets.xcassets/HomeVC/img3.imageset/Contents.json
  57. BIN
      JSJPCoach/Assets.xcassets/HomeVC/img3.imageset/ic_my_order.png
  58. 21 0
      JSJPCoach/Assets.xcassets/HomeVC/img4.imageset/Contents.json
  59. BIN
      JSJPCoach/Assets.xcassets/HomeVC/img4.imageset/ic_assign_record.png
  60. 21 0
      JSJPCoach/Assets.xcassets/HomeVC/img5.imageset/Contents.json
  61. BIN
      JSJPCoach/Assets.xcassets/HomeVC/img5.imageset/ic_score.png
  62. 21 0
      JSJPCoach/Assets.xcassets/HomeVC/img6.imageset/Contents.json
  63. BIN
      JSJPCoach/Assets.xcassets/HomeVC/img6.imageset/ic_train_img.png
  64. 21 0
      JSJPCoach/Assets.xcassets/HomeVC/img7.imageset/Contents.json
  65. BIN
      JSJPCoach/Assets.xcassets/HomeVC/img7.imageset/ic_release_plan.png
  66. 21 0
      JSJPCoach/Assets.xcassets/HomeVC/img8.imageset/Contents.json
  67. BIN
      JSJPCoach/Assets.xcassets/HomeVC/img8.imageset/ic_my_reservation.png
  68. 21 0
      JSJPCoach/Assets.xcassets/HomeVC/img9.imageset/Contents.json
  69. BIN
      JSJPCoach/Assets.xcassets/HomeVC/img9.imageset/教学日志.png
  70. 21 0
      JSJPCoach/Assets.xcassets/HomeVC/nouse1.imageset/Contents.json
  71. BIN
      JSJPCoach/Assets.xcassets/HomeVC/nouse1.imageset/预考成绩.png
  72. BIN
      JSJPCoach/Assets.xcassets/HomeVC/nouse2.imageset/3.png
  73. 21 0
      JSJPCoach/Assets.xcassets/HomeVC/nouse2.imageset/Contents.json
  74. BIN
      JSJPCoach/Assets.xcassets/HomeVC/nouse3.imageset/03(1).png
  75. 21 0
      JSJPCoach/Assets.xcassets/HomeVC/nouse3.imageset/Contents.json
  76. BIN
      JSJPCoach/Assets.xcassets/HomeVC/nouse4.imageset/02(1).png
  77. 21 0
      JSJPCoach/Assets.xcassets/HomeVC/nouse4.imageset/Contents.json
  78. BIN
      JSJPCoach/Assets.xcassets/LaunchImage.launchimage/1242X2208.png
  79. BIN
      JSJPCoach/Assets.xcassets/LaunchImage.launchimage/320×480.png
  80. BIN
      JSJPCoach/Assets.xcassets/LaunchImage.launchimage/640X1136-1.png
  81. BIN
      JSJPCoach/Assets.xcassets/LaunchImage.launchimage/640X1136.png
  82. BIN
      JSJPCoach/Assets.xcassets/LaunchImage.launchimage/640X960-1.png
  83. BIN
      JSJPCoach/Assets.xcassets/LaunchImage.launchimage/640X960.png
  84. BIN
      JSJPCoach/Assets.xcassets/LaunchImage.launchimage/750X1334.png
  85. 74 0
      JSJPCoach/Assets.xcassets/LaunchImage.launchimage/Contents.json
  86. BIN
      JSJPCoach/Assets.xcassets/LaunchImage.launchimage/ln_Coa.png
  87. 6 0
      JSJPCoach/Assets.xcassets/Period/Contents.json
  88. 21 0
      JSJPCoach/Assets.xcassets/Period/drawer_head.imageset/Contents.json
  89. BIN
      JSJPCoach/Assets.xcassets/Period/drawer_head.imageset/drawer_head.png
  90. BIN
      JSJPCoach/Assets.xcassets/Period/erWeiMa.imageset/12(1)-1.png
  91. BIN
      JSJPCoach/Assets.xcassets/Period/erWeiMa.imageset/12(1)-2.png
  92. BIN
      JSJPCoach/Assets.xcassets/Period/erWeiMa.imageset/12(1).png
  93. 23 0
      JSJPCoach/Assets.xcassets/Period/erWeiMa.imageset/Contents.json
  94. BIN
      JSJPCoach/Assets.xcassets/Period/periodDate.imageset/3(1).png
  95. 21 0
      JSJPCoach/Assets.xcassets/Period/periodDate.imageset/Contents.json
  96. BIN
      JSJPCoach/Assets.xcassets/Period/periodStep.imageset/4.png
  97. 21 0
      JSJPCoach/Assets.xcassets/Period/periodStep.imageset/Contents.json
  98. BIN
      JSJPCoach/Assets.xcassets/Period/priceCar.imageset/093CD266C7166E4B2F0ACE5274FCFB5B.png
  99. 21 0
      JSJPCoach/Assets.xcassets/Period/priceCar.imageset/Contents.json
  100. BIN
      JSJPCoach/Assets.xcassets/Period/priceTime.imageset/0EBAA5D839F5E16BFB9212B88A1AB04F.png

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 2047 - 0
JSJPCoach.xcodeproj/project.pbxproj


+ 7 - 0
JSJPCoach.xcodeproj/project.xcworkspace/contents.xcworkspacedata

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+   version = "1.0">
+   <FileRef
+      location = "self:JSJPCoach.xcodeproj">
+   </FileRef>
+</Workspace>

BIN
JSJPCoach.xcodeproj/project.xcworkspace/xcuserdata/apple.xcuserdatad/UserInterfaceState.xcuserstate


+ 5 - 0
JSJPCoach.xcodeproj/xcuserdata/apple.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Bucket
+   type = "1"
+   version = "2.0">
+</Bucket>

+ 111 - 0
JSJPCoach.xcodeproj/xcuserdata/apple.xcuserdatad/xcschemes/JSJPCoach.xcscheme

@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "0820"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "1872DD931E72768A00110D89"
+               BuildableName = "JSJPCoach.app"
+               BlueprintName = "JSJPCoach"
+               ReferencedContainer = "container:JSJPCoach.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+         <TestableReference
+            skipped = "NO">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "1872DDAC1E72768A00110D89"
+               BuildableName = "JSJPCoachTests.xctest"
+               BlueprintName = "JSJPCoachTests"
+               ReferencedContainer = "container:JSJPCoach.xcodeproj">
+            </BuildableReference>
+         </TestableReference>
+         <TestableReference
+            skipped = "NO">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "1872DDB71E72768A00110D89"
+               BuildableName = "JSJPCoachUITests.xctest"
+               BlueprintName = "JSJPCoachUITests"
+               ReferencedContainer = "container:JSJPCoach.xcodeproj">
+            </BuildableReference>
+         </TestableReference>
+      </Testables>
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "1872DD931E72768A00110D89"
+            BuildableName = "JSJPCoach.app"
+            BlueprintName = "JSJPCoach"
+            ReferencedContainer = "container:JSJPCoach.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Release"
+      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 = "1872DD931E72768A00110D89"
+            BuildableName = "JSJPCoach.app"
+            BlueprintName = "JSJPCoach"
+            ReferencedContainer = "container:JSJPCoach.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "1872DD931E72768A00110D89"
+            BuildableName = "JSJPCoach.app"
+            BlueprintName = "JSJPCoach"
+            ReferencedContainer = "container:JSJPCoach.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 32 - 0
JSJPCoach.xcodeproj/xcuserdata/apple.xcuserdatad/xcschemes/xcschememanagement.plist

@@ -0,0 +1,32 @@
+<?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>SchemeUserState</key>
+	<dict>
+		<key>JSJPCoach.xcscheme</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>0</integer>
+		</dict>
+	</dict>
+	<key>SuppressBuildableAutocreation</key>
+	<dict>
+		<key>1872DD931E72768A00110D89</key>
+		<dict>
+			<key>primary</key>
+			<true/>
+		</dict>
+		<key>1872DDAC1E72768A00110D89</key>
+		<dict>
+			<key>primary</key>
+			<true/>
+		</dict>
+		<key>1872DDB71E72768A00110D89</key>
+		<dict>
+			<key>primary</key>
+			<true/>
+		</dict>
+	</dict>
+</dict>
+</plist>

+ 19 - 0
JSJPCoach.xcodeproj/xcuserdata/zhangrong.xcuserdatad/xcschemes/xcschememanagement.plist

@@ -0,0 +1,19 @@
+<?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>SchemeUserState</key>
+	<dict>
+		<key>JSJPCoach.xcscheme</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>1</integer>
+		</dict>
+		<key>JSJPCoach.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>6</integer>
+		</dict>
+	</dict>
+</dict>
+</plist>

+ 10 - 0
JSJPCoach.xcworkspace/contents.xcworkspacedata

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+   version = "1.0">
+   <FileRef
+      location = "group:JSJPCoach.xcodeproj">
+   </FileRef>
+   <FileRef
+      location = "group:Pods/Pods.xcodeproj">
+   </FileRef>
+</Workspace>

+ 8 - 0
JSJPCoach.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>

BIN
JSJPCoach.xcworkspace/xcuserdata/apple.xcuserdatad/UserInterfaceState.xcuserstate


+ 5 - 0
JSJPCoach.xcworkspace/xcuserdata/apple.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Bucket
+   type = "0"
+   version = "2.0">
+</Bucket>

+ 5 - 0
JSJPCoach.xcworkspace/xcuserdata/echoshacolee.xcuserdatad/IDEFindNavigatorScopes.plist

@@ -0,0 +1,5 @@
+<?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">
+<array/>
+</plist>

BIN
JSJPCoach.xcworkspace/xcuserdata/echoshacolee.xcuserdatad/UserInterfaceState.xcuserstate


+ 55 - 0
JSJPCoach.xcworkspace/xcuserdata/echoshacolee.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Bucket
+   type = "0"
+   version = "2.0">
+   <Breakpoints>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "JSJPCoach/HomeVC/MyPlanVC.m"
+            timestampString = "558428855.216007"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "583"
+            endingLineNumber = "583"
+            landmarkName = "-removeScanViewAndIsCanTime"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "JSJPCoach/HomeVC/MyPlanVC.m"
+            timestampString = "558428855.216333"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "561"
+            endingLineNumber = "561"
+            landmarkName = "-makeOverScanView"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "JSJPCoach/HomeVC/MyPlanVC.m"
+            timestampString = "558428855.2163889"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "610"
+            endingLineNumber = "610"
+            landmarkName = "-removeScanView"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+   </Breakpoints>
+</Bucket>

+ 5 - 0
JSJPCoach.xcworkspace/xcuserdata/zhangrong.xcuserdatad/IDEFindNavigatorScopes.plist

@@ -0,0 +1,5 @@
+<?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">
+<array/>
+</plist>

BIN
JSJPCoach.xcworkspace/xcuserdata/zhangrong.xcuserdatad/UserInterfaceState.xcuserstate


+ 67 - 0
JSJPCoach.xcworkspace/xcuserdata/zhangrong.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Bucket
+   uuid = "650030B8-827B-4366-97D8-1BA150797643"
+   type = "0"
+   version = "2.0">
+   <Breakpoints>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.ExceptionBreakpoint">
+         <BreakpointContent
+            uuid = "DA2E614A-2EBC-42BF-A1D2-58D3AEDF60C1"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            scope = "0"
+            stopOnStyle = "0">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "EFD75DC5-44A1-48E0-B4F9-79805E9482F3"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "JSJPCoach/HomeVC/TheoryTrainVC.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "801"
+            endingLineNumber = "801"
+            landmarkName = "-getCoachSignStatus"
+            landmarkType = "7">
+            <Locations>
+               <Location
+                  uuid = "EFD75DC5-44A1-48E0-B4F9-79805E9482F3 - c809faa58e7838b1"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "-[TheoryTrainVC getCoachSignStatus]"
+                  moduleName = "JSJPCoach"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Users/zhangrong/Library/Mobile%20Documents/com~apple~CloudDocs/Exploit/XZZ/%E8%BE%BD%E5%AE%81/LN_Coach/JSJPCoach/JSJPCoach/HomeVC/TheoryTrainVC.m"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "801"
+                  endingLineNumber = "801"
+                  offsetFromSymbolStart = "516">
+               </Location>
+               <Location
+                  uuid = "EFD75DC5-44A1-48E0-B4F9-79805E9482F3 - 7619dfadf309427c"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "__35-[TheoryTrainVC getCoachSignStatus]_block_invoke"
+                  moduleName = "JSJPCoach"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Users/zhangrong/Library/Mobile%20Documents/com~apple~CloudDocs/Exploit/XZZ/%E8%BE%BD%E5%AE%81/LN_Coach/JSJPCoach/JSJPCoach/HomeVC/TheoryTrainVC.m"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "802"
+                  endingLineNumber = "802"
+                  offsetFromSymbolStart = "88">
+               </Location>
+            </Locations>
+         </BreakpointContent>
+      </BreakpointProxy>
+   </Breakpoints>
+</Bucket>

+ 27 - 0
JSJPCoach/AFDescribeObj.h

@@ -0,0 +1,27 @@
+//
+//  AFDescribeObj.h
+//  animationFrame
+//
+//  Created by pingshw on 14-5-27.
+//  Copyright (c) 2014年 pingshw. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+typedef enum
+{
+    AFAnimationStrokeEnd = 0
+}AFAnimationType;
+
+@interface AFDescribeObj : NSObject <CAAnimationDelegate>
+
+@property (nonatomic, weak) UIView *containerView;
+@property (nonatomic) AFAnimationType type;
+@property (nonatomic, strong) NSArray *shapeLayers;
+@property (nonatomic, strong) CABasicAnimation *basicAnimation;
+
+- (id)initWithType:(AFAnimationType)af_type inView:(UIView *)view;
+- (void)setStartTime:(CGFloat)af_startTime andDuration:(CGFloat)af_duration;
+- (void)addLineFrom:(CGPoint)from toPoint:(CGPoint)to color:(UIColor *)color;
+
+@end

+ 73 - 0
JSJPCoach/AFDescribeObj.m

@@ -0,0 +1,73 @@
+//
+//  AFDescribeObj.m
+//  animationFrame
+//
+//  Created by pingshw on 14-5-27.
+//  Copyright (c) 2014年 pingshw. All rights reserved.
+//
+
+#import "AFDescribeObj.h"
+
+@implementation AFDescribeObj
+{
+    NSArray *types;
+    CGFloat startTime;
+    CGFloat duration;
+}
+@synthesize containerView;
+@synthesize type;
+@synthesize shapeLayers;
+@synthesize basicAnimation;
+
+- (id)initWithType:(AFAnimationType)af_type inView:(UIView *)view
+{
+    self = [super init];
+    
+    if (self)
+    {
+        self.type = af_type;
+        self.containerView = view;
+        
+        shapeLayers = [NSArray array];
+        
+        types = @[@"strokeEnd"];
+    }
+    
+    return self;
+}
+
+- (void)setStartTime:(CGFloat)af_startTime andDuration:(CGFloat)af_duration
+{
+    startTime = af_startTime;
+    duration = af_duration;
+    
+    basicAnimation = [CABasicAnimation animationWithKeyPath:types[type]];
+    basicAnimation.delegate = containerView;
+    basicAnimation.duration = af_duration+af_startTime;
+    basicAnimation.fromValue = [NSNumber numberWithFloat:-af_startTime/af_duration];
+    basicAnimation.toValue = [NSNumber numberWithFloat:1.0];
+}
+
+- (void)addLineFrom:(CGPoint)from toPoint:(CGPoint)to color:(UIColor *)color
+{
+    UIBezierPath *path = [UIBezierPath bezierPath];
+    [path moveToPoint:from];
+    [path addLineToPoint:to];
+    
+    CAShapeLayer *pathLayer = [CAShapeLayer layer];
+    pathLayer.frame = containerView.bounds;
+    pathLayer.path = path.CGPath;
+    pathLayer.strokeColor = color.CGColor;
+    pathLayer.lineWidth = 2.0f;
+    pathLayer.lineJoin = kCALineJoinBevel;
+    
+    [pathLayer addAnimation:basicAnimation forKey:types[type]];
+    
+    NSMutableArray *ary = [NSMutableArray arrayWithArray:shapeLayers];
+    [ary addObject:pathLayer];
+    shapeLayers = [NSArray arrayWithArray:ary];
+    
+    [containerView.layer addSublayer:pathLayer];
+}
+
+@end

+ 19 - 0
JSJPCoach/AFView.h

@@ -0,0 +1,19 @@
+//
+//  AFView.h
+//  animationFrame
+//
+//  Created by pingshw on 14-5-27.
+//  Copyright (c) 2014年 pingshw. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface AFView : UIView
+@property (nonatomic) CGFloat min_X;
+@property (nonatomic) CGFloat min_Y;
+@property (nonatomic) CGFloat max_X;
+@property (nonatomic) CGFloat max_Y;
+@property (nonatomic, strong) NSArray *data;
+@property (nonatomic, strong) NSArray *x_labels;
+@property (nonatomic, strong) NSArray *y_labels;
+@end

+ 232 - 0
JSJPCoach/AFView.m

@@ -0,0 +1,232 @@
+//
+//  AFView.m
+//  animationFrame
+//
+//  Created by pingshw on 14-5-27.
+//  Copyright (c) 2014年 pingshw. All rights reserved.
+//
+
+#import "AFView.h"
+#import "AFDescribeObj.h"
+
+@interface CCView : UIView
+
+@end
+
+@implementation AFView
+{
+    CGFloat w;
+    CGFloat h;
+}
+@synthesize min_Y;
+@synthesize max_Y;
+@synthesize min_X;
+@synthesize max_X;
+@synthesize data;
+@synthesize x_labels;
+@synthesize y_labels;
+
+- (id)initWithFrame:(CGRect)frame
+{
+    self = [super initWithFrame:frame];
+    if (self) {
+
+        w = frame.size.width;
+        h = frame.size.height;
+        
+        self.backgroundColor = defGreen;
+    }
+    return self;
+}
+
+- (void)setData:(NSArray *)_data
+{
+    data = [NSArray arrayWithArray:_data];
+    
+//    NSString* imgName = @"question_index_bg.png";
+    CGFloat startTime = .5f;
+//    UIImageView *iv;
+    
+    UIColor* lineCol = [UIColor whiteColor];
+    
+    CGFloat imgw = 12;
+    CGPoint e;
+    UIView* ccv;
+    if (_data.count >0) {
+        e = [data[0] CGPointValue];
+        e.x = (e.x - min_X)*0.8*w/(max_X - min_X) + 0.125*w;
+        e.y = 0.875*h - (e.y - min_Y)*0.8*h/(max_Y - min_Y);
+        ccv = [[CCView alloc] initWithFrame:CGRectMake(0, 0, imgw, imgw)];
+        [self addSubview:ccv];
+        ccv.center = e;
+    }
+    
+    for (int i=1; i<data.count; i++)
+    {
+        
+        CGPoint s = [data[i-1] CGPointValue];
+        CGPoint e = [data[i] CGPointValue];
+        
+        s.x = (s.x - min_X)*0.8*w/(max_X - min_X) + 0.125*w;
+        s.y = 0.875*h - (s.y - min_Y)*0.8*h/(max_Y - min_Y);
+        e.x = (e.x - min_X)*0.8*w/(max_X - min_X) + 0.125*w;
+        e.y = 0.875*h - (e.y - min_Y)*0.8*h/(max_Y - min_Y);
+        
+        AFDescribeObj *desObj = [[AFDescribeObj alloc] initWithType:AFAnimationStrokeEnd inView:self];
+        [desObj setStartTime:startTime andDuration:0.5f];
+        [desObj addLineFrom:s toPoint:e color:lineCol];
+        startTime += 0.5f;
+        
+        ccv = [[CCView alloc] initWithFrame:CGRectMake(0, 0, imgw, imgw)];
+        [self addSubview:ccv];
+        ccv.center = e;
+//        [ccArr addObject:ccv];
+    }
+    
+//    for (UIView* v in ccArr) {
+//        [self bringSubviewToFront:v];
+//    }
+}
+
+- (void)setX_labels:(NSArray *)_x_labels
+{
+    x_labels = [NSArray arrayWithArray:_x_labels];
+    CGFloat num = ((CGFloat)x_labels.count)-1.0;
+    CGFloat x_interval = 0.8*w/num;
+    
+    UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0.9*h, w, 0.1*h)];
+    v.alpha = 0;
+    
+    for (int i=0; i<x_labels.count; i++)
+    {
+        NSString *str = x_labels[i];
+        UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0.025*w+i*x_interval, 0, 0.2*w, 0.1*h)];
+        label.backgroundColor = [UIColor clearColor];
+        label.textAlignment = NSTextAlignmentCenter;
+        label.font = [UIFont scaleSize:16.0];
+        label.text = str;
+        [v addSubview:label];
+        [label setTextColor:[UIColor whiteColor]];
+    }
+    
+    [self addSubview:v];
+    [UIView animateWithDuration:1.5f
+                     animations:^{
+                         v.alpha = 1;
+                     }];
+}
+
+- (void)setY_labels:(NSArray *)_y_labels
+{
+    y_labels = [NSArray arrayWithArray:_y_labels];
+    CGFloat num = ((CGFloat)y_labels.count)-1.0;
+    CGFloat y_interval = 0.8*h/num;
+    
+    CGFloat wid = .2*w;
+    UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, wid, h)];
+    v.alpha = 0;
+    
+    for (int i=0; i<y_labels.count; i++)
+    {
+        NSString *str = y_labels[y_labels.count- 1 - i];
+        UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(5, 0.875*h - 6 - y_interval*i, wid, w/28.0)];
+        [label setFrame:CGRectMake(5,h*.78- h/7.0*i, wid, h/7.0)];
+        label.backgroundColor = [UIColor clearColor];
+        label.textAlignment = NSTextAlignmentLeft;
+        label.font = [UIFont scaleSize:16.0];
+        label.text = str;
+        [v addSubview:label];
+        [label setTextColor:[UIColor whiteColor]];
+        
+        CGFloat hei = h*.95;
+        UIView*v = [[UIView alloc] initWithFrame:CGRectMake(0.1*w,.08*hei+hei*1.0/y_labels.count*i, w, 1)];
+        [v setBackgroundColor:RGBA_COLOR(240, 240, 240, 1)];//[UIColor colorWithRed:240 green:240 blue:240 alpha:1]
+        [self addSubview:v];
+        
+        label.center = CGPointMake(label.center.x, v.y);
+    }
+    
+    [self addSubview:v];
+    [UIView animateWithDuration:1.5f
+                     animations:^{
+                         v.alpha = 1;
+                     }];
+}
+
+@end
+
+
+@implementation CCView
+
+-(instancetype)initWithFrame:(CGRect)frame
+{
+    self = [super initWithFrame:frame];
+    if (self) {
+        [self setBackgroundColor:[UIColor clearColor]];
+    }
+    return self;
+}
+
+
+
+-(void)drawRect:(CGRect)rect
+{
+    //圆的线条宽度
+    CGFloat lw = 2;
+    UIColor *color = [UIColor whiteColor];
+    [color set];//设置线条颜色
+    CGFloat d = self.frame.size.width * .8;
+    CGFloat x = (self.frame.size.width - d)/2.0;
+    UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(x, x, d, d)];
+    path.lineWidth = lw;
+    [path stroke];//空心的图形
+    
+}
+@end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 76 - 0
JSJPCoach/ActivityView.h

@@ -0,0 +1,76 @@
+//
+//  ActivityView.h
+//  Wxl
+//
+//  Created by wxl on 11-10-9.
+//  Copyright 2011 hna. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import <OpenGLES/EAGL.h>
+#import <OpenGLES/ES1/gl.h>
+#import <OpenGLES/ES1/glext.h>
+
+#import <QuartzCore/QuartzCore.h>
+#import <OpenGLES/EAGLDrawable.h>
+
+/*
+ 这里可以自定义的各种配置 
+ */
+
+#define sizeRate 2.0
+//大小
+#define mySize         CGSizeMake(37* sizeRate, 37* sizeRate)
+//内半径
+#define INRADIUS       8.0* sizeRate
+//外半径
+#define OUTRADIUS      17.0* sizeRate
+//线宽
+#define LINEWIDTH      2.5
+
+//转动动画颜色  0.9  0.6  0.3
+#define  BeginR		0.9
+#define  BeginG		0.6
+#define  BeginB		0.3
+
+//背景动画颜色 1.0 1.0 1.0
+#define  EndR       0.9
+#define  EndG       0.9
+#define  EndB       0.9
+
+/*------------------------------------------------*/
+
+
+@interface ActivityView : UIView
+{
+@private
+	// The pixel dimensions of the backbuffer
+	GLint backingWidth;
+	GLint backingHeight;
+	
+	EAGLContext *context;
+	
+	// OpenGL names for the renderbuffer and framebuffers used to render to this view
+	GLuint viewRenderbuffer, viewFramebuffer;
+	
+	// OpenGL name for the depth buffer that is attached to viewFramebuffer, if it exists (0 if it does not exist)
+	GLuint depthRenderbuffer;
+	
+	CADisplayLink  * displayLink;
+	NSInteger animationFrameInterval;
+	
+	GLfloat        * allLineVertexs;
+	GLfloat        * allLineColors;
+	
+	BOOL             isAnimationRunning;
+	BOOL		     hidesWhenStopped;
+
+}
+
+@property BOOL hidesWhenStopped;
+
+-(void)startAnimating;
+-(void)stopAnimating;
+-(BOOL)isAnimating;
+
+@end

+ 287 - 0
JSJPCoach/ActivityView.mm

@@ -0,0 +1,287 @@
+//
+//  ActivityView.m
+//  Wxl
+//
+//  Created by wxl on 11-10-9.
+//  Copyright 2011 hna. All rights reserved.
+//
+
+#import "ActivityView.h"
+
+#define DEGREES_TO_RADIANS(__ANGLE) ((__ANGLE) / 180.0 * M_PI)
+
+@interface  ActivityView(PrivateMethods)
+- (BOOL)createFramebuffer;
+- (void)destroyFramebuffer;
+- (void)drawView;
+- (void)commitInit;
+@end
+
+@implementation ActivityView
+@synthesize hidesWhenStopped;
+
+#pragma mark ------
+#pragma mark Draw 
+
+//创建正视图
+- (void)setupView
+{
+	glViewport(0,0,backingWidth,backingHeight);
+	glMatrixMode(GL_PROJECTION);
+	glLoadIdentity();
+	
+	glOrthof(0, backingWidth, 0 , backingHeight, -1, 1);
+	
+	glMatrixMode(GL_MODELVIEW);
+	glLoadIdentity();
+}
+
+- (void)updateColorWithIndex:(short)index;
+{
+	/*
+	 看到的11和12都是由于系统的UIActivityIndicatorView共有12条线
+	 */
+	
+	if(index<0 || index >11) return;
+	
+	for(short i=0;i<12;i++,index++)
+	{
+		index %= 12;
+		
+		//1color rgba
+		allLineColors[index*8+0]=MIN(EndR,BeginR+(1.0/12.0)*i);
+		allLineColors[index*8+1]=MIN(EndG,BeginG+(1.0/12.0)*i);
+		allLineColors[index*8+2]=MIN(EndB,BeginB+(1.0/12.0)*i);
+		allLineColors[index*8+3]=1.0;
+		
+		//2color rgba
+		allLineColors[index*8+4]=MIN(EndR,BeginR+(1.0/12.0)*i);
+		allLineColors[index*8+5]=MIN(EndG,BeginG+(1.0/12.0)*i);
+		allLineColors[index*8+6]=MIN(EndB,BeginB+(1.0/12.0)*i);
+		allLineColors[index*8+7]=1.0;
+	}
+}
+
+//绘制
+- (void)drawView
+{
+    //如果是后台 就不在展示弹出框了
+    if (myDelegate.isBackgroundTask) {
+        return;
+    }
+    
+	[EAGLContext setCurrentContext:context];
+	glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
+	
+	glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
+	glLoadIdentity();
+	
+	glPushMatrix();
+	
+	glTranslatef(self.bounds.size.width/2.0,self.bounds.size.height/2.0,0.0);
+	glColorPointer(4, GL_FLOAT,0,allLineColors);
+	glVertexPointer(2,GL_FLOAT,0,allLineVertexs);
+	glDrawArrays(GL_LINES,0,24);
+	
+	glPopMatrix();
+	//dansonmark  先这样 看能不能捕获
+	// Display the buffer
+    @try {
+        glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
+        [context presentRenderbuffer:GL_RENDERBUFFER_OES];
+        
+        //5帧更新动画
+        static short FrameCount=0;
+        static short animCount=11;
+        FrameCount++;
+        if(FrameCount>=5)
+        {
+            FrameCount=0;
+            
+            animCount--;
+            if(animCount<0)
+                animCount=11;
+            
+            [self updateColorWithIndex:animCount];
+        }
+    } @catch (NSException *exception) {
+    } @finally {
+        
+    }
+	
+}
+
+#pragma mark ------
+#pragma mark LifeCycle
+
++ (Class) layerClass
+{
+	return [CAEAGLLayer class];
+}
+
+- (void)commitInit
+{
+	CAEAGLLayer *eaglLayer = (CAEAGLLayer *)self.layer;
+	
+	eaglLayer.opaque = NO;    //层是透明的
+	// In this application, we want to retain the EAGLDrawable contents after a call to presentRenderbuffer.
+	eaglLayer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys:
+									[NSNumber numberWithBool:YES], kEAGLDrawablePropertyRetainedBacking, kEAGLColorFormatRGBA8, kEAGLDrawablePropertyColorFormat, nil];
+	
+	context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1];
+	
+	if (!context || ![EAGLContext setCurrentContext:context]) 
+	{
+		//[self release];
+		NSAssert(0,@"CAEAGLLayer context error!");
+	}
+	
+	animationFrameInterval=1;
+	depthRenderbuffer=1;
+	hidesWhenStopped=FALSE;
+	isAnimationRunning=FALSE;
+	
+	//初始化opengles
+	glClearColor(0.0,0.0,0.0,0.0);
+	glShadeModel(GL_SMOOTH);
+	glEnable(GL_DEPTH_TEST);
+	
+	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+	glEnable(GL_BLEND);
+	glEnable(GL_LINE_SMOOTH);
+	
+	glEnableClientState(GL_VERTEX_ARRAY);
+	glEnableClientState(GL_COLOR_ARRAY);
+	glLineWidth(LINEWIDTH);
+	
+	//计算所有顶点
+	allLineVertexs = new GLfloat[12*2*2];   //12条线 24个顶点
+	allLineColors  = new GLfloat[12*2*4];   //24个顶点的颜色
+	
+	for(int i=0;i<12;i++)
+	{
+		GLfloat x=cosf(DEGREES_TO_RADIANS(i*30));
+		GLfloat y=sinf(DEGREES_TO_RADIANS(i*30));
+		
+		allLineVertexs[i*4+0]=INRADIUS*x;
+		allLineVertexs[i*4+1]=INRADIUS*y;
+		
+		allLineVertexs[i*4+2]=OUTRADIUS*x;
+		allLineVertexs[i*4+3]=OUTRADIUS*y;
+	}
+	
+	[self updateColorWithIndex:0];
+}
+
+- (id)initWithFrame:(CGRect)frame
+{
+	frame.size.width=mySize.width;
+	frame.size.height=mySize.height;
+	
+	if(self = [super initWithFrame:frame])
+	{
+		[self commitInit];
+	}
+	return self;
+}
+
+- (BOOL)isAnimating
+{
+	return isAnimationRunning;
+}
+
+-(void)startAnimating
+{
+	displayLink = [NSClassFromString(@"CADisplayLink") displayLinkWithTarget:self selector:@selector(drawView)];
+	[displayLink setFrameInterval:animationFrameInterval];
+	[displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
+	
+	isAnimationRunning=TRUE;
+	if(hidesWhenStopped)
+		self.hidden=FALSE;
+}
+
+-(void)stopAnimating
+{
+	[displayLink invalidate];
+	displayLink=nil;
+	
+	isAnimationRunning=FALSE;
+	if(hidesWhenStopped)
+		self.hidden=TRUE;
+}
+
+-(void)layoutSubviews
+{
+	[EAGLContext setCurrentContext:context];
+	[self destroyFramebuffer];
+	[self createFramebuffer];
+	[self setupView];
+}
+
+- (BOOL)createFramebuffer
+{
+	// Generate IDs for a framebuffer object and a color renderbuffer
+	glGenFramebuffersOES(1, &viewFramebuffer);
+	glGenRenderbuffersOES(1, &viewRenderbuffer);
+	
+	glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
+	glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
+	// This call associates the storage for the current render buffer with the EAGLDrawable (our CAEAGLLayer)
+	// allowing us to draw into a buffer that will later be rendered to screen wherever the layer is (which corresponds with our view).
+	[context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:(id<EAGLDrawable>)self.layer];
+	glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, viewRenderbuffer);
+	
+	glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth);
+	glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight);
+	
+	if(depthRenderbuffer)
+	{
+		glGenRenderbuffersOES(1, &depthRenderbuffer);
+		glBindRenderbufferOES(GL_RENDERBUFFER_OES, depthRenderbuffer);
+		glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT16_OES, backingWidth, backingHeight);
+		glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, depthRenderbuffer);
+	}
+	
+	if(glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) != GL_FRAMEBUFFER_COMPLETE_OES)
+	{
+		NSLog(@"failed to make complete framebuffer object %x", glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES));
+		return NO;
+	}
+	
+	return YES;
+}
+
+// Clean up any buffers we have allocated.
+- (void)destroyFramebuffer
+{
+	glDeleteFramebuffersOES(1, &viewFramebuffer);
+	viewFramebuffer = 0;
+	glDeleteRenderbuffersOES(1, &viewRenderbuffer);
+	viewRenderbuffer = 0;
+	
+	if(depthRenderbuffer)
+	{
+		glDeleteRenderbuffersOES(1, &depthRenderbuffer);
+		depthRenderbuffer = 0;
+	}
+}
+
+// Releases resources when they are not longer needed.
+- (void) dealloc
+{
+    [self stopAnimating];
+	
+	if([EAGLContext currentContext] == context)
+	{
+		[EAGLContext setCurrentContext:nil];
+	}
+	
+	delete allLineVertexs;
+	delete allLineColors;
+	
+//	[context release];
+//	[super dealloc];
+}
+
+@end

+ 58 - 0
JSJPCoach/AppDelegate.h

@@ -0,0 +1,58 @@
+//
+//  AppDelegate.h
+//  JSJPCoach
+//
+//  Created by apple on 2017/3/10.
+//  Copyright © 2017年 Danson. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import <BaiduMapAPI_Base/BMKMapManager.h>
+#import "LocationTracker.h"
+
+//语音
+#import <AVFoundation/AVFoundation.h>
+
+//个推
+#import <GTSDK/GeTuiSdk.h>
+// iOS10 及以上需导入 UserNotifications.framework
+#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
+#import <UserNotifications/UserNotifications.h>
+#endif
+
+/// 个推开发者网站中申请App时,注册的AppId、AppKey、AppSecret
+#define kGtAppId           @"SzkJDeohQw5eiqF6hZU01A"
+#define kGtAppKey          @"XokJOiykLiABMmO0Ci3lC3"
+#define kGtAppSecret       @"981RLJonkj8MCmWv1Ze7O"
+
+//bugly
+#define BUGLY_APP_ID       @"892772f2c8"
+
+@interface AppDelegate : UIResponder <UIApplicationDelegate>
+{
+    BMKMapManager *_mapManager;
+}
+
+@property (strong, nonatomic) UIWindow *window;
+
+@property (nonatomic, assign) BOOL isBackgroundTask;
+
+@property (nonatomic, assign) BOOL isPeriodIng;
+
+//嵌入后台相关
+@property (nonatomic, retain) LocationTracker *locationTracker;
+@property (nonatomic, retain) NSTimer *locationUpdateTimer;
+
+//记录当前播放语音 好做关闭处理
+@property (retain, nonatomic) AVSpeechSynthesizer *myAudioPlayer;
+
+//个推token
+@property(nonatomic,strong)NSString* token;
+
+/**
+ 接口留给推送用的。
+ */
+-(void)gotoLoad;
+
+@end
+

+ 604 - 0
JSJPCoach/AppDelegate.m

@@ -0,0 +1,604 @@
+//
+//  AppDelegate.m
+//  JSJPCoach
+//
+//  Created by apple on 2017/3/10.
+//  Copyright © 2017年 Danson. All rights reserved.
+//
+
+#import "AppDelegate.h"
+#import "ViewController.h"
+#import "LoginVC.h"
+#import "ADView.h"
+#import "MyMsgVC.h"
+#import <SMS_SDK/SMSSDK.h>
+#import "MyUINavigationController.h"
+#import "TheoryTrainVC.h"
+
+//客服
+#import "QMProfileManager.h"
+
+//bugly腾讯bug统计
+#import <Bugly/Bugly.h>
+
+@interface AppDelegate ()<UIScrollViewDelegate,UIAlertViewDelegate,BMKGeneralDelegate,GeTuiSdkDelegate, UNUserNotificationCenterDelegate>
+{
+    UIScrollView* scroll;
+    
+    //no use
+    NSString *pushType;
+    NSString *pushID;
+}
+
+@end
+
+@implementation AppDelegate
+
+
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
+    
+    //异常统计
+#ifdef DEBUG
+    //do sth1.
+#else
+    [Bugly startWithAppId:BUGLY_APP_ID];
+#endif
+	self.window = [[UIWindow alloc] initWithFrame:kFrame];
+    [self.window makeKeyAndVisible];
+    
+    //初始化地图
+    _mapManager = [[BMKMapManager alloc]init];
+    // 如果要关注网络及授权验证事件,请设定     generalDelegate参数
+    BOOL ret = [_mapManager start:@"d6Zg7kcdIcasgMKsFdUzyPLyFNhkkvXx"  generalDelegate:self];
+    if (!ret) {
+        NSLog(@"manager start failed!");
+    }
+    
+    //客服注册
+    QMProfileManager *manger = [QMProfileManager sharedInstance];
+    [manger loadProfile:@"sinatechcn" password:@"321456"];//8062moor 123456
+    
+    // 通过个推平台分配的appId、 appKey 、appSecret 启动SDK,注:该方法需要在主线程中调用
+    [GeTuiSdk startSdkWithAppId:kGtAppId appKey:kGtAppKey appSecret:kGtAppSecret delegate:self];
+    // 注册 通知(本地/远程)
+    [self registerRemoteNotification];
+    
+    /*
+        若用户点击icon启动,lauchOptions内无数据
+     */
+#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
+    //didReceiveNotificationResponse 统一处理
+    
+    
+#else
+    //本地通知
+    // 处理退出后通知的点击,程序启动后获取通知对象,如果是首次启动还没有发送通知,那第一次通知对象为空,没必要去处理通知(如跳转到指定页面)
+    if (launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]) {
+        
+        //ios<10的话,对应的didreceiveLoacal说是接受不到消息(要求前/后台),这一点在ios10以后解决了
+        UILocalNotification *localNotifi = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
+        NSDictionary *userInfo = localNotifi.userInfo;
+        if (userInfo[@"theoryTrainVC_classId"]) {
+            //理论计时提醒本地推送
+            [self gotoTheory];
+            return YES;
+        }
+    }
+    
+    //远程通知
+    if (launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey])
+    {
+        //关于这个方法远程和进程不一样 一个是userinfo字典。一个是本地通知
+        NSDictionary* userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
+        
+        //这里不用判断重复消息
+        NSString *msgId = [userInfo[@"_gmid_"] componentsSeparatedByString:@":"][1];
+        NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
+        [userDefaults setObject:msgId forKey:@"remoteNotifymsgId"];
+        [userDefaults synchronize];
+        
+        NSString *jsonStr = userInfo[@"payload"];
+        if ([jsonStr length] != 0) {
+            NSData *data = [jsonStr dataUsingEncoding:NSUTF8StringEncoding];
+            if (data) {
+                NSDictionary * payloadDic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
+                pushType = [NSString stringWithFormat:@"%@",payloadDic[@"code"]];
+                pushID = [NSString stringWithFormat:@"%@",payloadDic[@"id"]];
+                
+                if (pushType != 0) {
+                    [self gotoPush];
+                }else{
+                    //其它信息
+                    [self gotoLoad];
+                    [self showMsgByArertWithTitle:payloadDic[@"title"] message:payloadDic[@"body"]];
+                }
+                return YES;
+            }
+        }
+
+    }
+    
+#endif
+    
+    loadADPaths();
+    
+    //判断跳转页面 这样每次更新版本 都会有导航页
+    NSDictionary *infoDic = [[NSBundle mainBundle] infoDictionary];
+    NSString *vesionNow = [infoDic objectForKey:@"CFBundleShortVersionString"];
+    
+    if (![defUser.isWelcomed isEqualToString:vesionNow]) {
+        
+        //刚刚下载 要加载一次广告 存本地
+        defUser.isWelcomed = vesionNow;
+        [self makeLaunchView];
+        loadADPaths();
+    }else{
+        
+        //在这里搞个 广告页面 加载广告
+        [ADView showADView];
+        @try {
+            //是否为新版本
+            [self onCheckVersion];
+        }
+        @catch (NSException *exception) {
+            
+        }
+        @finally {
+            [self gotoLoad];
+        }
+    }
+    
+    return YES;
+}
+
+#pragma mark 推送注册
+/** 注册 APNs */
+- (void)registerRemoteNotification {
+    /*
+     警告:Xcode8 需要手动开启"TARGETS -> Capabilities -> Push Notifications"
+     */
+    
+    if ([[UIDevice currentDevice].systemVersion floatValue] >= 10.0) {
+        
+        UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
+        center.delegate = self;
+        [center requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionCarPlay) completionHandler:^(BOOL granted, NSError *_Nullable error) {
+            if (!error) {
+                NSLog(@"request authorization succeeded!(iOS >= 10.0)");
+            }
+        }];
+        
+    } else if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {
+        UIUserNotificationType types = (UIUserNotificationTypeAlert | UIUserNotificationTypeSound | UIUserNotificationTypeBadge);
+        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:types categories:nil];
+        [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
+    }
+    
+    //远程需添加
+    [[UIApplication sharedApplication] registerForRemoteNotifications];
+}
+
+/** 远程通知注册成功委托 */
+- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
+    
+    NSString *token = [[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
+    token = [token stringByReplacingOccurrencesOfString:@" " withString:@""];
+//    NSLog(@"\n>>>[DeviceToken Success]:%@\n\n", token);
+    
+    // 向个推服务器注册deviceToken
+    [GeTuiSdk registerDeviceToken:token];
+}
+
+/** 远程通知注册失败委托 */
+- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
+    
+        NSLog(@"FailToRegisterForRemoteNotificationsWithError:%@",error);
+    
+}
+
+//iOS7.0 以后支持 APP 后台刷新数据,会回调 performFetchWithCompletionHandler 接口。为保证个推SDK的数据刷新,需在该回调接口中调用[GeTuiSdk resume]方法帮助个推 SDK 刷新数据。
+- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
+    /// Background Fetch 恢复SDK 运行
+    [GeTuiSdk resume];
+    completionHandler(UIBackgroundFetchResultNewData);
+}
+
+#pragma mark - iOS < 10
+/* 
+    1.点击通知栏,
+    2.要求app未被杀死,如果app是terminate就去didfinishlaunch获取;这一点在ios10以后改善了
+ */
+//-----本地推送
+- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{
+    //ios<10 点击弹窗
+    if (notification.userInfo[@"theoryTrainVC_classId"]) {
+        [self gotoTheory];
+    }
+}
+//------远程推送
+//处理APNs 通知点击事件,统计有效用户点击数
+- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
+    
+//    NSLog(@"didReceiveRemoteNotification and iOS<10");
+    // 将收到的APNs信息传给个推统计
+    [GeTuiSdk handleRemoteNotification:userInfo];
+    completionHandler(UIBackgroundFetchResultNewData);
+    
+    [self remoteNotificationDealWithPayLoadDic:userInfo];
+}
+
+#pragma mark iOS > 10
+/*
+    1.对于iOS 10 及以后版本,为处理 APNs 通知点击,统计有效用户点击数,需先添加 UNUserNotificationCenterDelegate
+    2.app可以处于任何状态(terminate,前/后台)
+ */
+#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
+
+- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler {
+    
+//    NSLog(@"willPresentNotification and iOS>10前台:%@", notification.request.content.userInfo);
+    
+    // 根据APP需要,判断是否要提示用户Badge、Sound、Alert(ios>10 如果需要应用在前台也展示通知)
+    completionHandler(UNNotificationPresentationOptionBadge | UNNotificationPresentationOptionSound | UNNotificationPresentationOptionAlert);
+    
+}
+
+//  iOS 10: 统一获取推送的接口  点击通知进入App时触发,在该方法内统计有效用户点击数 (点击弹窗,不管app处于任何状态(terminate,前/后台)都会调用)
+- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)(void))completionHandler {
+    
+//    NSLog(@"didReceiveNotificationResponse iOS>10:%@", response.notification.request.content.userInfo);
+    
+    //理论计时提醒本地推送
+    if (response.notification.request.content.userInfo[@"theoryTrainVC_classId"]) {
+        [self gotoTheory];
+        return;
+    }
+    
+    //远程推送
+    //将收到的APNs信息传给个推统计
+    [GeTuiSdk handleRemoteNotification:response.notification.request.content.userInfo];
+    completionHandler();
+    
+    NSDictionary* userInfo = response.notification.request.content.userInfo;
+    
+    [self remoteNotificationDealWithPayLoadDic:userInfo];
+}
+
+#endif
+
+#pragma mark - 个推相关方法
+
+/** SDK启动成功返回cid */
+- (void)GeTuiSdkDidRegisterClient:(NSString *)clientId {
+    //个推SDK已注册,返回clientId
+//    NSLog(@"\n>>>[GeTuiSdk RegisterClient]:%@\n\n", clientId);
+    myDelegate.token = clientId;
+    upLoadToken();
+    
+}
+
+/** SDK遇到错误回调 */
+- (void)GeTuiSdkDidOccurError:(NSError *)error {
+    //个推错误报告,集成步骤发生的任何错误都在这里通知,如果集成后,无法正常收到消息,查看这里的通知。
+    NSLog(@"\n>>>[GexinSdk error]:%@\n\n", [error localizedDescription]);
+}
+
+/** SDK收到透传消息回调 */
+- (void)GeTuiSdkDidReceivePayloadData:(NSData *)payloadData andTaskId:(NSString *)taskId andMsgId:(NSString *)msgId andOffLine:(BOOL)offLine fromGtAppId:(NSString *)appId {
+    
+    //收到个推消息
+    if (payloadData) {
+//        NSString * payloadMsg = [[NSString alloc] initWithBytes:payloadData.bytes length:payloadData.length encoding:NSUTF8StringEncoding];
+//        NSLog(@"GeTuiSdkDidReceivepayloadMsg:%@",payloadMsg);
+        
+        //判断是否被处理过[即发送离线消息的时候,会走apns+个推sdk(有效期内)]
+        //ps:这里处理之后不做存档操作,保证点击通知栏的时候可以”再处理一次“
+        NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
+        NSString *oldmsgId = [userDefaults objectForKey:@"remoteNotifymsgId"];
+        if ([oldmsgId isEqualToString:msgId]) {
+            return;
+        }
+        
+        NSDictionary * payloadDic = [NSJSONSerialization JSONObjectWithData:payloadData options:NSJSONReadingMutableContainers error:nil];
+        if (payloadDic.count == 0) {
+            return;
+        }
+        
+        pushType = [NSString stringWithFormat:@"%@",payloadDic[@"code"]];
+        pushID = [NSString stringWithFormat:@"%@",payloadDic[@"id"]];
+        if ([pushType integerValue] != 0) {
+            
+            UIAlertController *alertFind = [UIAlertController alertControllerWithTitle:payloadDic[@"title"] message:payloadDic[@"body"] preferredStyle:UIAlertControllerStyleAlert];
+            
+            [alertFind addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
+                
+            }]];
+            [alertFind addAction:[UIAlertAction actionWithTitle:@"前往" style:UIAlertActionStyleDefault handler:^(UIAlertAction *  action) {
+            
+                [self gotoPush];
+            }]];
+            [self.window.rootViewController presentViewController:alertFind animated:true completion:nil];
+            
+        }else{
+            //其它信息
+            [self showMsgByArertWithTitle:payloadDic[@"title"] message:payloadDic[@"body"]];
+        }
+        
+    }
+}
+
+#pragma mark 远程通知的数据处理
+-(void)remoteNotificationDealWithPayLoadDic:(NSDictionary *)userInfo{
+    
+    /*
+     {
+     "_ge_" = 1;
+     "_gmid_" = "OSL-0818_bJ6zVRy8cC6JsflZOYPXO9:965f14a1051748c4a48f9db2437362e5:d48422d462d2bcf0b9d962f150b235b9";
+     "_gurl_" = "sdk.open.extension.getui.com:8123";
+     aps =     {
+     alert =         {
+     body = "\U60a8\U9a7e\U6821\U6709\U8f66\U8f86\U7ec8\U7aef\U62a5\U8b66\U9700\U89e3\U9664\Uff0c\U8bf7\U67e5\U770b\U5e76\U5904\U7406";
+     title = "\U544a\U8b66\U6d88\U606f";
+     };
+     badge = 2;
+     category = "button\U663e\U793a";
+     "content-available" = 1;
+     "mutable-content" = 1;
+     sound = default;
+     };
+     payload = "{\"title\":\"\U544a\U8b66\U6d88\U606f\",\"code\":\"1\",\"body\":\"\U60a8\U9a7e\U6821\U6709\U8f66\U8f86\U7ec8\U7aef\U62a5\U8b66\U9700\U89e3\U9664\Uff0c\U8bf7\U67e5\U770b\U5e76\U5904\U7406\,\"id\":\"2\"}";
+     }
+     */
+    
+    
+    // _gmid_对应-- taskId msgId clientID
+    //这里使用msgid判断是否被处理【不过似乎应该用taskid?@lee,幻想着一个任务多条消息]
+    NSString *msgId = [userInfo[@"_gmid_"] componentsSeparatedByString:@":"][1];
+    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
+    NSString *oldMsgId = [userDefaults objectForKey:@"remoteNotifymsgId"];
+    
+    if ([msgId isEqualToString:oldMsgId]) {
+        return;
+    }
+    
+    //开始处理
+    [userDefaults setObject:msgId forKey:@"remoteNotifymsgId"];
+    [userDefaults synchronize];
+    
+    NSString *jsonStr = userInfo[@"payload"];
+    if ([jsonStr length] == 0) {
+        return;
+    }
+    
+    NSData *data = [jsonStr dataUsingEncoding:NSUTF8StringEncoding];
+    if (data) {
+        NSDictionary * payloadDic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
+        pushType = [NSString stringWithFormat:@"%@",payloadDic[@"code"]];
+        pushID = [NSString stringWithFormat:@"%@",payloadDic[@"id"]];
+        
+        if (pushType != 0) {
+            [self gotoPush];
+        }else{
+            //其它信息
+            [self showMsgByArertWithTitle:payloadDic[@"title"] message:payloadDic[@"body"]];
+        }
+    }
+}
+
+-(void)showMsgByArertWithTitle:(NSString *)title message:(NSString *)message{
+    
+    if (message.length == 0) {
+        return;
+    }
+    
+    //其它信息
+    UIAlertController *alertFind = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert];
+    
+    [alertFind addAction:[UIAlertAction actionWithTitle:@"我知道了" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
+        
+    }]];
+    [self.window.rootViewController presentViewController:alertFind animated:true completion:nil];
+}
+
+#pragma mark 跳转相关
+
+-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
+{
+    if (alertView.tag == 10000) {
+        
+        if (buttonIndex == 1) {
+            NSURL *url = [NSURL URLWithString:@"itms-apps://itunes.apple.com/cn/app/liao-ning-jia-pei-jiao-lian-ban/id1225444971?l=en&mt=8"];
+            [[UIApplication sharedApplication]openURL:url];
+        }
+    }else{
+        
+        if (buttonIndex != alertView.cancelButtonIndex) {
+            [self gotoPush];
+        }
+    }
+}
+
+-(void)gotoTheory{
+    
+    TheoryTrainVC * vc = [[TheoryTrainVC alloc]init];
+    vc.isNotification = YES;
+    MyUINavigationController *nav = [[MyUINavigationController alloc]initWithRootViewController:vc];
+    [myDelegate.window setRootViewController:nav];
+}
+
+-(void)gotoPush
+{
+    [self goToMessage];
+}
+
+-(void)goToMessage
+{
+    MyMsgVC* vc = [[MyMsgVC alloc] init];
+    vc.isNotification = YES;
+    MyUINavigationController *nav = [[MyUINavigationController alloc]initWithRootViewController:vc];
+    [myDelegate.window setRootViewController:nav];
+}
+
+#pragma mark -
+//程序挂起
+- (void)applicationWillResignActive:(UIApplication *)application {
+    
+}
+//程序进入后台
+- (void)applicationDidEnterBackground:(UIApplication *)application {
+    myDelegate.isBackgroundTask = YES;
+
+}
+//程序到前台
+- (void)applicationWillEnterForeground:(UIApplication *)application {
+    
+    //[ADView showADView];
+}
+//程序复原
+- (void)applicationDidBecomeActive:(UIApplication *)application
+{
+    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];//本地
+    myDelegate.isBackgroundTask = NO;
+    [GeTuiSdk resetBadge];//同步给个推
+}
+
+- (void)applicationWillTerminate:(UIApplication *)application {
+
+}
+
+
+#pragma mark       检查新旧
+-(void)onCheckVersion
+{
+    if (![Util connectedToNetWork])
+    {
+        return;
+    }
+    
+    NSDictionary *infoDic = [[NSBundle mainBundle] infoDictionary];
+    NSString *currentVersion = [infoDic objectForKey:@"CFBundleShortVersionString"];
+    
+    NSString *URL = @"http://itunes.apple.com/lookup?id=1225444971";
+    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
+    [request setURL:[NSURL URLWithString:URL]];
+    [request setHTTPMethod:@"POST"];
+    
+    NSOperationQueue *queue=[NSOperationQueue mainQueue];
+    [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
+        
+
+        if (!data) {
+            return;
+        }
+        //如果data等于nil的时候 再去解析 会发生崩溃
+        NSDictionary *dic=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
+        
+        if (!dic) {
+            return;
+        }
+        NSArray *infoArray = [dic objectForKey:@"results"];
+        if ([infoArray count]) {
+            NSDictionary *releaseInfo = [infoArray objectAtIndex:0];
+            NSString *lastVersion = [releaseInfo objectForKey:@"version"];
+            
+            NSArray *last = [lastVersion componentsSeparatedByString:@"."];
+            NSArray *current = [currentVersion componentsSeparatedByString:@"."];
+            NSComparisonResult result = [last[0] compare:current[0]];
+            if (result == NSOrderedDescending) {
+                
+                [self updateVersion];
+            }else if(result == NSOrderedSame){
+                
+                result = [last[1] compare:current[1]];
+                if (result == NSOrderedDescending) {
+                    
+                    [self updateVersion];
+                }else if(result == NSOrderedSame){
+                    
+                    result = [last[2] compare:current[2]];
+                    if (result == NSOrderedDescending) {
+                        [self updateVersion];
+                    }
+                }
+            }
+        }
+    }];
+}
+
+-(void)updateVersion
+{
+    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"更新提示" message:@"有新的版本发布,是否前往更新?" delegate:self cancelButtonTitle:@"关闭" otherButtonTitles:@"更新", nil];
+    alert.tag = 10000;
+    [alert show];
+}
+
+#pragma mark - 欢迎页面
+
+-(void)makeLaunchView
+{
+    NSArray* images = @[@"welcom_page_21.jpg",@"welcom_page_22.jpg",@"welcom_page_23.jpg"];
+    //关于导航页要修改 添上新的导航页
+    scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, kSize.width, kSize.height)];
+    /**跳到第4页,也会欢迎结束。
+     */
+    [scroll setContentSize:CGSizeMake(kSize.width* images.count+10, 0)];
+    [scroll setBackgroundColor:[UIColor orangeColor]];
+    [scroll setShowsHorizontalScrollIndicator:NO];
+    [scroll setDelegate:self];
+    scroll.pagingEnabled = YES;
+    scroll.bounces = NO;
+    
+    UIViewController* vc = [UIViewController new];
+    [vc.view addSubview:scroll];
+    [self.window setRootViewController:vc];
+    
+    UIImageView* iv;
+    for (int i =0; i<images.count; i++) {
+        iv = [[UIImageView alloc] initWithFrame:kFrame];
+        iv.x = kSize.width*i;
+        [scroll addSubview:iv];
+        [iv setImage:[UIImage imageNamed:images[i]]];
+    
+        UIButton* btn = [[UIButton alloc] initWithFrame:CGRectMake(kSize.width-70+kSize.width*i, kStatusHeight, 50, 28)];
+        btn.backgroundColor = [UIColor darkGrayColor];
+        [btn setTitle:[NSString stringWithFormat:@"%d / %ld",i+1,images.count] forState:UIControlStateNormal];
+        [btn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
+        if (i==images.count-1) {
+            btn.tag = 100;
+        }
+        [scroll addSubview:btn];
+        [btn addTarget:self action:@selector(nextClick:) forControlEvents:UIControlEventTouchUpInside];
+    }
+    
+    UIButton* btn = [[UIButton alloc] initWithFrame:iv.frame];
+    [scroll addSubview:btn];
+    [btn addTarget:self action:@selector(gotoLoad) forControlEvents:UIControlEventTouchUpInside];
+}
+
+-(void)nextClick:(UIButton *)btn{
+    if (btn.tag == 100) {
+        [self gotoLoad];
+        return;
+    }
+    CGPoint off = scroll.contentOffset;
+    [scroll setContentOffset:CGPointMake(off.x+kSize.width, off.y) animated:YES];
+}
+
+-(void)gotoLoad
+{
+    ViewController *vc = [ViewController new];
+    MyUINavigationController *nav = [[MyUINavigationController alloc] initWithRootViewController:vc];
+    nav.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
+    self.window.rootViewController = nav;
+}
+
+-(void)scrollViewDidScroll:(UIScrollView *)scrollView
+{
+    CGPoint off = scrollView.contentOffset;
+    if (off.x / kSize.width > 2.0) {
+        [self gotoLoad];
+    }
+}
+
+
+@end

BIN
JSJPCoach/Assets.xcassets/001.imageset/001.png


+ 21 - 0
JSJPCoach/Assets.xcassets/001.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "001.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

BIN
JSJPCoach/Assets.xcassets/AliPay.imageset/146621846347974559.png


+ 21 - 0
JSJPCoach/Assets.xcassets/AliPay.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "146621846347974559.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

+ 62 - 0
JSJPCoach/Assets.xcassets/AppIcon.appiconset/Contents.json

@@ -0,0 +1,62 @@
+{
+  "images" : [
+    {
+      "size" : "20x20",
+      "idiom" : "iphone",
+      "filename" : "ln_CoaiPhoneNotification_20pt@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "size" : "20x20",
+      "idiom" : "iphone",
+      "filename" : "ln_CoaiPhoneNotification_20pt@3x.png",
+      "scale" : "3x"
+    },
+    {
+      "size" : "29x29",
+      "idiom" : "iphone",
+      "filename" : "ln_CoaiPhoneSpootlight5_29pt@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "size" : "29x29",
+      "idiom" : "iphone",
+      "filename" : "ln_CoaiPhoneSpootlight5_29pt@3x.png",
+      "scale" : "3x"
+    },
+    {
+      "size" : "40x40",
+      "idiom" : "iphone",
+      "filename" : "ln_CoaiPhoneSpootlight7_40pt@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "size" : "40x40",
+      "idiom" : "iphone",
+      "filename" : "ln_CoaiPhoneSpootlight7_40pt@3x.png",
+      "scale" : "3x"
+    },
+    {
+      "size" : "60x60",
+      "idiom" : "iphone",
+      "filename" : "ln_CoaiPhoneApp_60pt@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "size" : "60x60",
+      "idiom" : "iphone",
+      "filename" : "ln_CoaiPhoneApp_60pt@3x.png",
+      "scale" : "3x"
+    },
+    {
+      "size" : "1024x1024",
+      "idiom" : "ios-marketing",
+      "filename" : "ln_Coa.png",
+      "scale" : "1x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

BIN
JSJPCoach/Assets.xcassets/AppIcon.appiconset/ln_Coa.png


BIN
JSJPCoach/Assets.xcassets/AppIcon.appiconset/ln_CoaiPhoneApp_60pt@2x.png


BIN
JSJPCoach/Assets.xcassets/AppIcon.appiconset/ln_CoaiPhoneApp_60pt@3x.png


BIN
JSJPCoach/Assets.xcassets/AppIcon.appiconset/ln_CoaiPhoneNotification_20pt@2x.png


BIN
JSJPCoach/Assets.xcassets/AppIcon.appiconset/ln_CoaiPhoneNotification_20pt@3x.png


BIN
JSJPCoach/Assets.xcassets/AppIcon.appiconset/ln_CoaiPhoneSpootlight5_29pt@2x.png


BIN
JSJPCoach/Assets.xcassets/AppIcon.appiconset/ln_CoaiPhoneSpootlight5_29pt@3x.png


BIN
JSJPCoach/Assets.xcassets/AppIcon.appiconset/ln_CoaiPhoneSpootlight7_40pt@2x.png


BIN
JSJPCoach/Assets.xcassets/AppIcon.appiconset/ln_CoaiPhoneSpootlight7_40pt@3x.png


+ 6 - 0
JSJPCoach/Assets.xcassets/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

+ 6 - 0
JSJPCoach/Assets.xcassets/HomeVC/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

+ 21 - 0
JSJPCoach/Assets.xcassets/HomeVC/bgImage.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "bg.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

BIN
JSJPCoach/Assets.xcassets/HomeVC/bgImage.imageset/bg.png


+ 21 - 0
JSJPCoach/Assets.xcassets/HomeVC/carIcon.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "ic_teach_normal.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

BIN
JSJPCoach/Assets.xcassets/HomeVC/carIcon.imageset/ic_teach_normal.png


+ 21 - 0
JSJPCoach/Assets.xcassets/HomeVC/img1.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "ic_teach_log.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

BIN
JSJPCoach/Assets.xcassets/HomeVC/img1.imageset/ic_teach_log.png


+ 21 - 0
JSJPCoach/Assets.xcassets/HomeVC/img10.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "培训.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

BIN
JSJPCoach/Assets.xcassets/HomeVC/img10.imageset/培训.png


+ 21 - 0
JSJPCoach/Assets.xcassets/HomeVC/img11.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "报修.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

BIN
JSJPCoach/Assets.xcassets/HomeVC/img11.imageset/报修.png


+ 21 - 0
JSJPCoach/Assets.xcassets/HomeVC/img12.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "联系我们.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

BIN
JSJPCoach/Assets.xcassets/HomeVC/img12.imageset/联系我们.png


+ 21 - 0
JSJPCoach/Assets.xcassets/HomeVC/img2.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "ic_my_students.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

BIN
JSJPCoach/Assets.xcassets/HomeVC/img2.imageset/ic_my_students.png


+ 21 - 0
JSJPCoach/Assets.xcassets/HomeVC/img3.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "ic_my_order.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

BIN
JSJPCoach/Assets.xcassets/HomeVC/img3.imageset/ic_my_order.png


+ 21 - 0
JSJPCoach/Assets.xcassets/HomeVC/img4.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "ic_assign_record.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

BIN
JSJPCoach/Assets.xcassets/HomeVC/img4.imageset/ic_assign_record.png


+ 21 - 0
JSJPCoach/Assets.xcassets/HomeVC/img5.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "ic_score.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

BIN
JSJPCoach/Assets.xcassets/HomeVC/img5.imageset/ic_score.png


+ 21 - 0
JSJPCoach/Assets.xcassets/HomeVC/img6.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "ic_train_img.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

BIN
JSJPCoach/Assets.xcassets/HomeVC/img6.imageset/ic_train_img.png


+ 21 - 0
JSJPCoach/Assets.xcassets/HomeVC/img7.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "ic_release_plan.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

BIN
JSJPCoach/Assets.xcassets/HomeVC/img7.imageset/ic_release_plan.png


+ 21 - 0
JSJPCoach/Assets.xcassets/HomeVC/img8.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "ic_my_reservation.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

BIN
JSJPCoach/Assets.xcassets/HomeVC/img8.imageset/ic_my_reservation.png


+ 21 - 0
JSJPCoach/Assets.xcassets/HomeVC/img9.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "教学日志.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

BIN
JSJPCoach/Assets.xcassets/HomeVC/img9.imageset/教学日志.png


+ 21 - 0
JSJPCoach/Assets.xcassets/HomeVC/nouse1.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "预考成绩.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

BIN
JSJPCoach/Assets.xcassets/HomeVC/nouse1.imageset/预考成绩.png


BIN
JSJPCoach/Assets.xcassets/HomeVC/nouse2.imageset/3.png


+ 21 - 0
JSJPCoach/Assets.xcassets/HomeVC/nouse2.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "3.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

BIN
JSJPCoach/Assets.xcassets/HomeVC/nouse3.imageset/03(1).png


+ 21 - 0
JSJPCoach/Assets.xcassets/HomeVC/nouse3.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "03(1).png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

BIN
JSJPCoach/Assets.xcassets/HomeVC/nouse4.imageset/02(1).png


+ 21 - 0
JSJPCoach/Assets.xcassets/HomeVC/nouse4.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "02(1).png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

BIN
JSJPCoach/Assets.xcassets/LaunchImage.launchimage/1242X2208.png


BIN
JSJPCoach/Assets.xcassets/LaunchImage.launchimage/320×480.png


BIN
JSJPCoach/Assets.xcassets/LaunchImage.launchimage/640X1136-1.png


BIN
JSJPCoach/Assets.xcassets/LaunchImage.launchimage/640X1136.png


BIN
JSJPCoach/Assets.xcassets/LaunchImage.launchimage/640X960-1.png


BIN
JSJPCoach/Assets.xcassets/LaunchImage.launchimage/640X960.png


BIN
JSJPCoach/Assets.xcassets/LaunchImage.launchimage/750X1334.png


+ 74 - 0
JSJPCoach/Assets.xcassets/LaunchImage.launchimage/Contents.json

@@ -0,0 +1,74 @@
+{
+  "images" : [
+    {
+      "extent" : "full-screen",
+      "idiom" : "iphone",
+      "subtype" : "2436h",
+      "filename" : "ln_Coa.png",
+      "minimum-system-version" : "11.0",
+      "orientation" : "portrait",
+      "scale" : "3x"
+    },
+    {
+      "extent" : "full-screen",
+      "idiom" : "iphone",
+      "subtype" : "736h",
+      "filename" : "1242X2208.png",
+      "minimum-system-version" : "8.0",
+      "orientation" : "portrait",
+      "scale" : "3x"
+    },
+    {
+      "extent" : "full-screen",
+      "idiom" : "iphone",
+      "subtype" : "667h",
+      "filename" : "750X1334.png",
+      "minimum-system-version" : "8.0",
+      "orientation" : "portrait",
+      "scale" : "2x"
+    },
+    {
+      "orientation" : "portrait",
+      "idiom" : "iphone",
+      "filename" : "640X960.png",
+      "extent" : "full-screen",
+      "minimum-system-version" : "7.0",
+      "scale" : "2x"
+    },
+    {
+      "extent" : "full-screen",
+      "idiom" : "iphone",
+      "subtype" : "retina4",
+      "filename" : "640X1136.png",
+      "minimum-system-version" : "7.0",
+      "orientation" : "portrait",
+      "scale" : "2x"
+    },
+    {
+      "orientation" : "portrait",
+      "idiom" : "iphone",
+      "filename" : "320×480.png",
+      "extent" : "full-screen",
+      "scale" : "1x"
+    },
+    {
+      "orientation" : "portrait",
+      "idiom" : "iphone",
+      "filename" : "640X960-1.png",
+      "extent" : "full-screen",
+      "scale" : "2x"
+    },
+    {
+      "orientation" : "portrait",
+      "idiom" : "iphone",
+      "filename" : "640X1136-1.png",
+      "extent" : "full-screen",
+      "subtype" : "retina4",
+      "scale" : "2x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

BIN
JSJPCoach/Assets.xcassets/LaunchImage.launchimage/ln_Coa.png


+ 6 - 0
JSJPCoach/Assets.xcassets/Period/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

+ 21 - 0
JSJPCoach/Assets.xcassets/Period/drawer_head.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "drawer_head.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

BIN
JSJPCoach/Assets.xcassets/Period/drawer_head.imageset/drawer_head.png


BIN
JSJPCoach/Assets.xcassets/Period/erWeiMa.imageset/12(1)-1.png


BIN
JSJPCoach/Assets.xcassets/Period/erWeiMa.imageset/12(1)-2.png


BIN
JSJPCoach/Assets.xcassets/Period/erWeiMa.imageset/12(1).png


+ 23 - 0
JSJPCoach/Assets.xcassets/Period/erWeiMa.imageset/Contents.json

@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "12(1)-1.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "12(1)-2.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "12(1).png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

BIN
JSJPCoach/Assets.xcassets/Period/periodDate.imageset/3(1).png


+ 21 - 0
JSJPCoach/Assets.xcassets/Period/periodDate.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "3(1).png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

BIN
JSJPCoach/Assets.xcassets/Period/periodStep.imageset/4.png


+ 21 - 0
JSJPCoach/Assets.xcassets/Period/periodStep.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "4.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

BIN
JSJPCoach/Assets.xcassets/Period/priceCar.imageset/093CD266C7166E4B2F0ACE5274FCFB5B.png


+ 21 - 0
JSJPCoach/Assets.xcassets/Period/priceCar.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "093CD266C7166E4B2F0ACE5274FCFB5B.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

BIN
JSJPCoach/Assets.xcassets/Period/priceTime.imageset/0EBAA5D839F5E16BFB9212B88A1AB04F.png


برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است