From: liangzhenying <867174124@qq.com> Date: Thu, 22 Jan 2026 08:12:57 +0000 (+0800) Subject: 新增高德 X-Git-Tag: 1.0.3~1 X-Git-Url: http://git.snicker.com.cn/sitemap.xml?a=commitdiff_plain;h=705b0ea3762284b28016bf7e19ce30e6c38dfd7d;p=mirrors%2FShenYin.git 新增高德 --- diff --git a/ShenYin/Podfile.lock b/ShenYin/Podfile.lock index 91f2524..871b96f 100644 --- a/ShenYin/Podfile.lock +++ b/ShenYin/Podfile.lock @@ -1,4 +1,11 @@ PODS: + - AMap3DMap-NO-IDFA (10.0.700): + - AMapFoundation-NO-IDFA (>= 1.8.0) + - AMapFoundation-NO-IDFA (1.8.2) + - AMapLocation-NO-IDFA (2.10.0): + - AMapFoundation-NO-IDFA (>= 1.8.0) + - AMapSearch-NO-IDFA (9.7.0): + - AMapFoundation-NO-IDFA (>= 1.8.0) - CryptoSwift (1.8.4) - DeviceKit (5.4.0) - DGActivityIndicatorView (2.1.1) @@ -70,6 +77,9 @@ PODS: - ZipArchive (1.4.0) DEPENDENCIES: + - AMap3DMap-NO-IDFA (= 10.0.700) + - AMapLocation-NO-IDFA + - AMapSearch-NO-IDFA (= 9.7.0) - CryptoSwift - DeviceKit (~> 5.4.0) - DGActivityIndicatorView @@ -97,6 +107,10 @@ DEPENDENCIES: SPEC REPOS: https://gitee.com/mirrors/CocoaPods-Specs.git: + - AMap3DMap-NO-IDFA + - AMapFoundation-NO-IDFA + - AMapLocation-NO-IDFA + - AMapSearch-NO-IDFA - CryptoSwift - DeviceKit - DGActivityIndicatorView @@ -130,6 +144,10 @@ SPEC REPOS: - ZipArchive SPEC CHECKSUMS: + AMap3DMap-NO-IDFA: e029d65ea35d3e4c0a948e1dab9e77109bf0e86a + AMapFoundation-NO-IDFA: 6ce0ef596d4eb8d934ff498e56747b6de1247b05 + AMapLocation-NO-IDFA: 735791aeb1ba52dff666e4158b86caf4b68b5be7 + AMapSearch-NO-IDFA: 749f73d5a773758f01a24eb8872f8798c8b47cb4 CryptoSwift: e64e11850ede528a02a0f3e768cec8e9d92ecb90 DeviceKit: bd34bb1766d926c3cc5a5f6e3e9a6dd10148b805 DGActivityIndicatorView: ff2c76073d79692f724863c8dd38685866a03cb6 @@ -162,6 +180,6 @@ SPEC CHECKSUMS: YYText: 5c461d709e24d55a182d1441c41dc639a18a4849 ZipArchive: e25a4373192673e3229ac8d6e9f64a3e5713c966 -PODFILE CHECKSUM: 0164676b37eb80faebf2999f878a492c1d277ddd +PODFILE CHECKSUM: 72f4eaacbe6e66655fb7c7aef1807fd74a1fd9b2 COCOAPODS: 1.16.2 diff --git a/ShenYin/ShenYin.xcodeproj/project.pbxproj b/ShenYin/ShenYin.xcodeproj/project.pbxproj index 0176d73..2abcf03 100644 --- a/ShenYin/ShenYin.xcodeproj/project.pbxproj +++ b/ShenYin/ShenYin.xcodeproj/project.pbxproj @@ -347,6 +347,7 @@ 3F887B9A2E38D8DC00C98658 /* Resources */, 5A934A35F54A5620CFD3C08A /* [CP] Embed Pods Frameworks */, 3FEFE9092F1B252000D82F17 /* Embed Frameworks */, + C952A11BAF04A31F5BE85A2D /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -536,6 +537,27 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ShenYin/Pods-ShenYin-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; + C952A11BAF04A31F5BE85A2D /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-ShenYin/Pods-ShenYin-resources-${CONFIGURATION}-input-files.xcfilelist", + ); + inputPaths = ( + ); + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-ShenYin/Pods-ShenYin-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ShenYin/Pods-ShenYin-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; FEE3A20D8A2FA81E622C488B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; diff --git a/ShenYin/ShenYin/Assets.xcassets/sport/Contents.json b/ShenYin/ShenYin/Assets.xcassets/sport/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/ShenYin/ShenYin/Assets.xcassets/sport/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ShenYin/ShenYin/Assets.xcassets/sport/ready_go.imageset/Contents.json b/ShenYin/ShenYin/Assets.xcassets/sport/ready_go.imageset/Contents.json new file mode 100644 index 0000000..34a7e3b --- /dev/null +++ b/ShenYin/ShenYin/Assets.xcassets/sport/ready_go.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Slice 145@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Slice 145@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ShenYin/ShenYin/Assets.xcassets/sport/ready_go.imageset/Slice 145@2x.png b/ShenYin/ShenYin/Assets.xcassets/sport/ready_go.imageset/Slice 145@2x.png new file mode 100644 index 0000000..71fc937 Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/sport/ready_go.imageset/Slice 145@2x.png differ diff --git a/ShenYin/ShenYin/Assets.xcassets/sport/ready_go.imageset/Slice 145@3x.png b/ShenYin/ShenYin/Assets.xcassets/sport/ready_go.imageset/Slice 145@3x.png new file mode 100644 index 0000000..5981ed5 Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/sport/ready_go.imageset/Slice 145@3x.png differ diff --git a/ShenYin/ShenYin/Assets.xcassets/sport/ready_route.imageset/Contents.json b/ShenYin/ShenYin/Assets.xcassets/sport/ready_route.imageset/Contents.json new file mode 100644 index 0000000..919644d --- /dev/null +++ b/ShenYin/ShenYin/Assets.xcassets/sport/ready_route.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Slice 147@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Slice 147@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ShenYin/ShenYin/Assets.xcassets/sport/ready_route.imageset/Slice 147@2x.png b/ShenYin/ShenYin/Assets.xcassets/sport/ready_route.imageset/Slice 147@2x.png new file mode 100644 index 0000000..f2c453c Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/sport/ready_route.imageset/Slice 147@2x.png differ diff --git a/ShenYin/ShenYin/Assets.xcassets/sport/ready_route.imageset/Slice 147@3x.png b/ShenYin/ShenYin/Assets.xcassets/sport/ready_route.imageset/Slice 147@3x.png new file mode 100644 index 0000000..a3e58cc Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/sport/ready_route.imageset/Slice 147@3x.png differ diff --git a/ShenYin/ShenYin/Assets.xcassets/sport/ready_target.imageset/Contents.json b/ShenYin/ShenYin/Assets.xcassets/sport/ready_target.imageset/Contents.json new file mode 100644 index 0000000..f26f980 --- /dev/null +++ b/ShenYin/ShenYin/Assets.xcassets/sport/ready_target.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Slice 146@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Slice 146@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ShenYin/ShenYin/Assets.xcassets/sport/ready_target.imageset/Slice 146@2x.png b/ShenYin/ShenYin/Assets.xcassets/sport/ready_target.imageset/Slice 146@2x.png new file mode 100644 index 0000000..5a1244b Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/sport/ready_target.imageset/Slice 146@2x.png differ diff --git a/ShenYin/ShenYin/Assets.xcassets/sport/ready_target.imageset/Slice 146@3x.png b/ShenYin/ShenYin/Assets.xcassets/sport/ready_target.imageset/Slice 146@3x.png new file mode 100644 index 0000000..dc6ca22 Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/sport/ready_target.imageset/Slice 146@3x.png differ diff --git a/ShenYin/ShenYin/Assets.xcassets/sport/sport_ride.imageset/Contents.json b/ShenYin/ShenYin/Assets.xcassets/sport/sport_ride.imageset/Contents.json new file mode 100644 index 0000000..713044b --- /dev/null +++ b/ShenYin/ShenYin/Assets.xcassets/sport/sport_ride.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Slice 131.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Slice 131@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Slice 131@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ShenYin/ShenYin/Assets.xcassets/sport/sport_ride.imageset/Slice 131.png b/ShenYin/ShenYin/Assets.xcassets/sport/sport_ride.imageset/Slice 131.png new file mode 100644 index 0000000..191cae3 Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/sport/sport_ride.imageset/Slice 131.png differ diff --git a/ShenYin/ShenYin/Assets.xcassets/sport/sport_ride.imageset/Slice 131@2x.png b/ShenYin/ShenYin/Assets.xcassets/sport/sport_ride.imageset/Slice 131@2x.png new file mode 100644 index 0000000..c662441 Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/sport/sport_ride.imageset/Slice 131@2x.png differ diff --git a/ShenYin/ShenYin/Assets.xcassets/sport/sport_ride.imageset/Slice 131@3x.png b/ShenYin/ShenYin/Assets.xcassets/sport/sport_ride.imageset/Slice 131@3x.png new file mode 100644 index 0000000..b667807 Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/sport/sport_ride.imageset/Slice 131@3x.png differ diff --git a/ShenYin/ShenYin/Assets.xcassets/sport/sport_run.imageset/Contents.json b/ShenYin/ShenYin/Assets.xcassets/sport/sport_run.imageset/Contents.json new file mode 100644 index 0000000..bc5702f --- /dev/null +++ b/ShenYin/ShenYin/Assets.xcassets/sport/sport_run.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Slice 130.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Slice 130@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Slice 130@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ShenYin/ShenYin/Assets.xcassets/sport/sport_run.imageset/Slice 130.png b/ShenYin/ShenYin/Assets.xcassets/sport/sport_run.imageset/Slice 130.png new file mode 100644 index 0000000..b41533a Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/sport/sport_run.imageset/Slice 130.png differ diff --git a/ShenYin/ShenYin/Assets.xcassets/sport/sport_run.imageset/Slice 130@2x.png b/ShenYin/ShenYin/Assets.xcassets/sport/sport_run.imageset/Slice 130@2x.png new file mode 100644 index 0000000..711ac41 Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/sport/sport_run.imageset/Slice 130@2x.png differ diff --git a/ShenYin/ShenYin/Assets.xcassets/sport/sport_run.imageset/Slice 130@3x.png b/ShenYin/ShenYin/Assets.xcassets/sport/sport_run.imageset/Slice 130@3x.png new file mode 100644 index 0000000..84b7f7c Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/sport/sport_run.imageset/Slice 130@3x.png differ diff --git a/ShenYin/ShenYin/Assets.xcassets/sport/sport_walk.imageset/Contents.json b/ShenYin/ShenYin/Assets.xcassets/sport/sport_walk.imageset/Contents.json new file mode 100644 index 0000000..f540b05 --- /dev/null +++ b/ShenYin/ShenYin/Assets.xcassets/sport/sport_walk.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Slice 132.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Slice 132@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Slice 132@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ShenYin/ShenYin/Assets.xcassets/sport/sport_walk.imageset/Slice 132.png b/ShenYin/ShenYin/Assets.xcassets/sport/sport_walk.imageset/Slice 132.png new file mode 100644 index 0000000..6488744 Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/sport/sport_walk.imageset/Slice 132.png differ diff --git a/ShenYin/ShenYin/Assets.xcassets/sport/sport_walk.imageset/Slice 132@2x.png b/ShenYin/ShenYin/Assets.xcassets/sport/sport_walk.imageset/Slice 132@2x.png new file mode 100644 index 0000000..67d9151 Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/sport/sport_walk.imageset/Slice 132@2x.png differ diff --git a/ShenYin/ShenYin/Assets.xcassets/sport/sport_walk.imageset/Slice 132@3x.png b/ShenYin/ShenYin/Assets.xcassets/sport/sport_walk.imageset/Slice 132@3x.png new file mode 100644 index 0000000..3355aed Binary files /dev/null and b/ShenYin/ShenYin/Assets.xcassets/sport/sport_walk.imageset/Slice 132@3x.png differ diff --git a/ShenYin/ShenYin/Launch/SceneDelegate.swift b/ShenYin/ShenYin/Launch/SceneDelegate.swift index 3abffac..f166788 100644 --- a/ShenYin/ShenYin/Launch/SceneDelegate.swift +++ b/ShenYin/ShenYin/Launch/SceneDelegate.swift @@ -18,8 +18,9 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { App.shared.window = window // window?.rootViewController = BaseTC() -// window?.rootViewController = UINavigationController(rootViewController: SportHomeVC()) - AppLaunch.start() + MapManager.shared.setupSdk() + window?.rootViewController = UINavigationController(rootViewController: ReadyVC()) +// AppLaunch.start() } func sceneDidDisconnect(_ scene: UIScene) { diff --git a/ShenYin/ShenYin/UI/Sport/Sport/Ready/CountdownView.swift b/ShenYin/ShenYin/UI/Sport/Sport/Ready/CountdownView.swift new file mode 100644 index 0000000..655cd2f --- /dev/null +++ b/ShenYin/ShenYin/UI/Sport/Sport/Ready/CountdownView.swift @@ -0,0 +1,76 @@ +// +// Untitled.swift +// ShenYin +// +// Created by liangshi on 2026/1/21. +// + +extension ReadyVC{ + class CountdownView: BaseView { + let label = UILabel() + let skip = UILabel() + var timer:Timer! + var count = 3 + + override func setupViews() { + addSubviews([label,skip]) + label.do { v in + v.textColor = .color(.first) + v.font = .bold(210) + v.textAlignment = .center + v.text = "\(count)" + } + skip.do { v in + v.textColor = .color(.first) + v.font = .regular(14) + v.textAlignment = .center + v.text = "直接开始".l10n + v.yc.addTap(target: self, action: #selector(skipAction)) + + let line = UIView() + line.backgroundColor = .color(.first) + v.addSubview(line) + line.snp.makeConstraints { make in + make.height.equalTo(1) + make.left.right.equalToSuperview() + make.bottom.equalToSuperview().offset(4) + } + } + backgroundColor = .white + } + + override func setupLayout() { + label.snp.makeConstraints { make in + make.center.equalToSuperview() + } + skip.snp.makeConstraints { make in + make.bottom.equalToSuperview().inset(100) + make.centerX.equalToSuperview() + } + } + override func setupData() { + timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(timerAction), userInfo: nil, repeats: true) + } + @objc func timerAction(){ + count -= 1 + label.text = "\(count)" + print(count) + if count == 0 { + skipAction() + } + } + static func show(in view:UIView){ + let countView = CountdownView() + view.addSubview(countView) + countView.snp.makeConstraints { make in + make.edges.equalToSuperview() + } + } + @objc func skipAction(){ + timer.invalidate() + App.shared.goToPage(BaseVC()) + removeFromSuperview() + } + } + +} diff --git a/ShenYin/ShenYin/UI/Sport/Sport/Ready/CustomMapView.swift b/ShenYin/ShenYin/UI/Sport/Sport/Ready/CustomMapView.swift new file mode 100644 index 0000000..fbc7567 --- /dev/null +++ b/ShenYin/ShenYin/UI/Sport/Sport/Ready/CustomMapView.swift @@ -0,0 +1,12 @@ +// +// Untitled.swift +// ShenYin +// +// Created by liangshi on 2026/1/21. +// + +class CustomMapView: BaseView { + + + +} diff --git a/ShenYin/ShenYin/UI/Sport/Sport/Ready/FooterView.swift b/ShenYin/ShenYin/UI/Sport/Sport/Ready/FooterView.swift new file mode 100644 index 0000000..e6847f0 --- /dev/null +++ b/ShenYin/ShenYin/UI/Sport/Sport/Ready/FooterView.swift @@ -0,0 +1,96 @@ +// +// FooterView.swift +// ShenYin +// +// Created by liangshi on 2026/1/21. +// + +extension ReadyVC{ + class FooterView: BaseView { + let targetBtn = ButtonItem() + let routeBtn = ButtonItem() + let goBtn = UIImageView() + + override func setupViews() { + addSubviews([targetBtn,goBtn,routeBtn]) + targetBtn.do { v in + v.titleLabel.text = "目标".l10n + v.icon.image = UIImage(named: "ready_target") + v.yc.setCornerRadius(18) + v.yc.addTap(target: self, action: #selector(targetAction)) + } + goBtn.do { v in + v.image = UIImage(named: "ready_go") + v.yc.addTap(target: self, action: #selector(goAction)) + } + routeBtn.do { v in + v.yc.setCornerRadius(18) + v.titleLabel.text = "路线".l10n + v.icon.image = UIImage(named: "ready_route") + v.yc.addTap(target: self, action: #selector(routeAction)) + } + } + + override func setupLayout() { + goBtn.snp.makeConstraints { make in + make.size.equalTo(90) + make.centerY.equalToSuperview() + make.centerX.equalTo(kScreenWid/2) + } + + targetBtn.snp.makeConstraints { make in + make.width.equalTo(90) + make.height.equalTo(36) + make.centerY.equalToSuperview() + make.right.equalTo(goBtn.snp.left).offset(-27) + } + routeBtn.snp.makeConstraints { make in + make.width.equalTo(90) + make.height.equalTo(36) + make.centerY.equalToSuperview() + make.left.equalTo(goBtn.snp.right).offset(27) + } + + } + + @objc func targetAction(){ + + } + @objc func goAction(){ + CountdownView.show(in: App.shared.window!) + } + @objc func routeAction(){ + + } + + class ButtonItem: BaseView { + let icon = UIImageView() + let titleLabel = UILabel() + + override func setupViews() { + addSubviews([titleLabel,icon]) + icon.do { v in + } + titleLabel.do { v in + v.textColor = .color(.first) + v.font = .regular(14) + } + backgroundColor = .white + } + + override func setupLayout() { + icon.snp.makeConstraints { make in + make.size.equalTo(24) + make.centerY.equalToSuperview() + make.left.equalToSuperview().inset(16) + } + titleLabel.snp.makeConstraints { make in + make.centerY.equalToSuperview() + make.left.equalTo(43) + } + } + } + + } + +} diff --git a/ShenYin/ShenYin/UI/Sport/Sport/Ready/ReadyVC.swift b/ShenYin/ShenYin/UI/Sport/Sport/Ready/ReadyVC.swift new file mode 100644 index 0000000..1eab05b --- /dev/null +++ b/ShenYin/ShenYin/UI/Sport/Sport/Ready/ReadyVC.swift @@ -0,0 +1,61 @@ +// +// Untitled.swift +// ShenYin +// +// Created by liangshi on 2026/1/21. +// +import MAMapKit + +class ReadyVC: BaseVC { + let headerView = UIView() + var mapView:MAMapView! + let footerView = FooterView() + + override func setupViews() { + mapView = MAMapView(frame: .zero) + mapView.delegate = self + mapView.showsUserLocation = true + mapView.zoomLevel = 16 + mapView.userTrackingMode = .followWithHeading + + view.addSubviews([headerView,mapView,footerView]) + headerView.do { v in + v.backgroundColor = .white + } + mapView.do { v in + v.backgroundColor = .green + + } + footerView.do { v in +// v.backgroundColor = .blue + } + } + override func setupLayout() { + headerView.snp.makeConstraints { make in + make.left.right.equalToSuperview() + make.top.equalToSuperview().inset(kNavBtm + 20) + make.height.equalTo(100) + } + footerView.snp.makeConstraints { make in + make.left.right.equalToSuperview() + make.bottom.equalToSuperview() + make.height.equalTo(200) + } + mapView.snp.makeConstraints { make in + make.left.right.equalToSuperview() + make.top.equalTo(headerView.snp.bottom) + make.bottom.equalTo(footerView.snp.top) + } + + } + override func setupData() { + + } + +} + +extension ReadyVC:MAMapViewDelegate{ + func mapViewRequireLocationAuth(_ locationManager: CLLocationManager!) { +// locationManager.requestAlwaysAuthorization() + } +} diff --git a/ShenYin/ShenYin/UI/Sport/Sport/SportRootView.swift b/ShenYin/ShenYin/UI/Sport/Sport/SportRootView.swift deleted file mode 100644 index 515dbe7..0000000 --- a/ShenYin/ShenYin/UI/Sport/Sport/SportRootView.swift +++ /dev/null @@ -1,21 +0,0 @@ -// -// SportVC.swift -// ShenYin -// -// Created by liangshi on 2026/1/20. -// - -import UIKit -import JXSegmentedView - -class SportRootView: BaseView{ - override func setupViews() { - backgroundColor = UIColor.random() - } -} - -extension SportRootView: JXSegmentedListContainerViewListDelegate { - func listView() -> UIView { - return self - } -} diff --git a/ShenYin/ShenYin/UI/Sport/Sport/SportTypeView.swift b/ShenYin/ShenYin/UI/Sport/Sport/SportTypeView.swift deleted file mode 100644 index 77b6797..0000000 --- a/ShenYin/ShenYin/UI/Sport/Sport/SportTypeView.swift +++ /dev/null @@ -1,23 +0,0 @@ -// -// SportTypeView.swift -// ShenYin -// -// Created by liangshi on 2026/1/20. -// -import UIKit - -class SportTypeView: BaseView{ - override func setupViews() { - - } - - - class SportTypeView: BaseView{ - override func setupViews() { - - } - - - - } -} diff --git a/ShenYin/ShenYin/UI/Sport/Sport/Tools/MapManager.swift b/ShenYin/ShenYin/UI/Sport/Sport/Tools/MapManager.swift new file mode 100644 index 0000000..76af958 --- /dev/null +++ b/ShenYin/ShenYin/UI/Sport/Sport/Tools/MapManager.swift @@ -0,0 +1,57 @@ +// +// MapManager.swift +// ShenYin +// +// Created by liangshi on 2026/1/21. +// +import MAMapKit +import UIKit + +class MapManager { + static let shared = MapManager() + + func setupSdk(){ + AMapServices.shared().apiKey = "57aebc5a63fa3ccb8cb81ae0cab649d1" + //判断是否是首次启动 + if !UserDefaults.standard.bool(forKey: "agreeStatus") { + //添加隐私合规弹窗 + self.addAlertController() + //更新App是否显示隐私弹窗的状态,隐私弹窗是否包含高德SDK隐私协议内容的状态. since 8.1.0 + MAMapView.updatePrivacyShow(AMapPrivacyShowStatus.didShow, privacyInfo: AMapPrivacyInfoStatus.didContain) + } + } + + + func addAlertController(){ + + let paragraphStyle : NSMutableParagraphStyle = NSMutableParagraphStyle.init() + paragraphStyle.alignment = NSTextAlignment.left + + let message : NSMutableAttributedString = NSMutableAttributedString.init(string: "\n亲,感谢您对XXX一直以来的信任!我们依据最新的监管要求更新了XXX《隐私权政策》,特向您说明如下\n1.为向您提供交易相关基本功能,我们会收集、使用必要的信息;\n2.基于您的明示授权,我们可能会获取您的位置(为您提供附近的商品、店铺及优惠资讯等)等信息,您有权拒绝或取消授权;\n3.我们会采取业界先进的安全措施保护您的信息安全;\n4.未经您同意,我们不会从第三方处获取、共享或向提供您的信息;", attributes: [NSAttributedString.Key.paragraphStyle:paragraphStyle]) + + message.setAttributes([NSAttributedString.Key.foregroundColor:UIColor.blue], range: message.mutableString.range(of: "《隐私权政策》")) + + let alert : UIAlertController = UIAlertController.init(title: "温馨提示(隐私合规示例)", message: "", preferredStyle: UIAlertController.Style.alert) + + alert.setValue(message, forKey: "attributedMessage") + + let conform : UIAlertAction = UIAlertAction.init(title: "同意", style: UIAlertAction.Style.default) { UIAlertAction in + UserDefaults.standard.set(true, forKey: "agreeStatus") + UserDefaults.standard.synchronize() + //更新用户授权高德SDK隐私协议状态. since 8.1.0 + MAMapView.updatePrivacyAgree(AMapPrivacyAgreeStatus.didAgree) + } + + let cancel : UIAlertAction = UIAlertAction.init(title: "不同意", style: UIAlertAction.Style.default) { UIAlertAction in + UserDefaults.standard.set(false, forKey: "agreeStatus") + UserDefaults.standard.synchronize() + //更新用户授权高德SDK隐私协议状态. since 8.1.0 + MAMapView.updatePrivacyAgree(AMapPrivacyAgreeStatus.notAgree) + } + + alert.addAction(conform) + alert.addAction(cancel) + + App.shared.window?.rootViewController?.present(alert, animated: true, completion: nil) + } +} diff --git a/ShenYin/ShenYin/UI/Sport/Sport/root/DataView.swift b/ShenYin/ShenYin/UI/Sport/Sport/root/DataView.swift new file mode 100644 index 0000000..d09ceef --- /dev/null +++ b/ShenYin/ShenYin/UI/Sport/Sport/root/DataView.swift @@ -0,0 +1,20 @@ +// +// DataView.swift +// ShenYin +// +// Created by liangshi on 2026/1/21. +// + +extension SportRootView{ + class DataView: BaseView { + + + override func setupViews() { + backgroundColor = .color(.cellBg) + } + + override func setupLayout() { + + } + } +} diff --git a/ShenYin/ShenYin/UI/Sport/Sport/root/GroupView.swift b/ShenYin/ShenYin/UI/Sport/Sport/root/GroupView.swift new file mode 100644 index 0000000..575d9b7 --- /dev/null +++ b/ShenYin/ShenYin/UI/Sport/Sport/root/GroupView.swift @@ -0,0 +1,20 @@ +// +// GroupView.swift +// ShenYin +// +// Created by liangshi on 2026/1/21. +// + +extension SportRootView{ + class GroupView: BaseView { + + + override func setupViews() { + backgroundColor = .color(.cellBg) + } + + override func setupLayout() { + + } + } +} diff --git a/ShenYin/ShenYin/UI/Sport/Sport/root/PlanView.swift b/ShenYin/ShenYin/UI/Sport/Sport/root/PlanView.swift new file mode 100644 index 0000000..05c6339 --- /dev/null +++ b/ShenYin/ShenYin/UI/Sport/Sport/root/PlanView.swift @@ -0,0 +1,20 @@ +// +// PlanView.swift +// ShenYin +// +// Created by liangshi on 2026/1/21. +// + +extension SportRootView{ + class PlanView: BaseView { + + + override func setupViews() { + backgroundColor = .color(.cellBg) + } + + override func setupLayout() { + + } + } +} diff --git a/ShenYin/ShenYin/UI/Sport/Sport/root/RouteView.swift b/ShenYin/ShenYin/UI/Sport/Sport/root/RouteView.swift new file mode 100644 index 0000000..245babb --- /dev/null +++ b/ShenYin/ShenYin/UI/Sport/Sport/root/RouteView.swift @@ -0,0 +1,20 @@ +// +// RouteView.swift +// ShenYin +// +// Created by liangshi on 2026/1/21. +// + +extension SportRootView{ + class RouteView: BaseView { + + + override func setupViews() { + backgroundColor = .color(.cellBg) + } + + override func setupLayout() { + + } + } +} diff --git a/ShenYin/ShenYin/UI/Sport/Sport/root/SportRootView.swift b/ShenYin/ShenYin/UI/Sport/Sport/root/SportRootView.swift new file mode 100644 index 0000000..29ea350 --- /dev/null +++ b/ShenYin/ShenYin/UI/Sport/Sport/root/SportRootView.swift @@ -0,0 +1,66 @@ +// +// SportVC.swift +// ShenYin +// +// Created by liangshi on 2026/1/20. +// + +import UIKit +import JXSegmentedView + +class SportRootView: BaseView{ + let sportType = SportTypeView() + let dataView = DataView() + let groupView = GroupView() + let planView = PlanView() + let routeView = RouteView() + + override func setupViews() { + addSubviews([sportType,dataView,groupView,planView,routeView]) + dataView.do { v in + v.yc.setCornerRadius(12) + } + groupView.do { v in + v.yc.setCornerRadius(12) + } + planView.do { v in + v.yc.setCornerRadius(12) + } + routeView.do { v in + v.yc.setCornerRadius(12) + } + } + override func setupLayout() { + sportType.snp.makeConstraints { make in + make.left.right.equalToSuperview() + make.top.equalToSuperview().inset(20) + make.height.equalTo(80) + } + dataView.snp.makeConstraints { make in + make.left.right.equalToSuperview().inset(18) + make.top.equalTo(sportType.snp.bottom).offset(10) + make.height.equalTo(123) + } + groupView.snp.makeConstraints { make in + make.left.right.equalToSuperview().inset(18) + make.top.equalTo(dataView.snp.bottom).offset(10) + make.height.equalTo(140) + } + planView.snp.makeConstraints { make in + make.left.right.equalToSuperview().inset(18) + make.top.equalTo(groupView.snp.bottom).offset(10) + make.height.equalTo(65) + } + routeView.snp.makeConstraints { make in + make.left.right.equalToSuperview().inset(18) + make.top.equalTo(planView.snp.bottom).offset(10) + make.height.equalTo(180) + } + } +} + +extension SportRootView: JXSegmentedListContainerViewListDelegate { + func listView() -> UIView { + return self + } +} diff --git a/ShenYin/ShenYin/UI/Sport/Sport/root/SportTypeView.swift b/ShenYin/ShenYin/UI/Sport/Sport/root/SportTypeView.swift new file mode 100644 index 0000000..a6c0a71 --- /dev/null +++ b/ShenYin/ShenYin/UI/Sport/Sport/root/SportTypeView.swift @@ -0,0 +1,119 @@ +// +// SportTypeView.swift +// ShenYin +// +// Created by liangshi on 2026/1/20. +// + + +enum SportType{ + case run + case ride + case walk + + var name:String{ + switch self { + case .run: + return "户外跑步" + case .ride: + return "户外骑行" + case .walk: + return "健走" + } + } + var icon:String{ + switch self { + case .run: + return "sport_run" + case .ride: + return "sport_ride" + case .walk: + return "sport_walk" + } + } + static var all:[SportType] = [.run,.ride,.walk] +} + +class SportTypeView: BaseView { + let run = SportTypeItem() + let ride = SportTypeItem() + let walk = SportTypeItem() + + override func setupViews() { + addSubviews([run,ride,walk]) + run.do { v in + v.type = .run + v.yc.addTap(target: self, action: #selector(runAction)) + } + ride.do { v in + v.type = .ride + v.yc.addTap(target: self, action: #selector(rideAction)) + } + walk.do { v in + v.type = .walk + v.yc.addTap(target: self, action: #selector(walkAction)) + } + } + + override func setupLayout() { + run.snp.makeConstraints { make in + make.left.equalToSuperview().inset(38) + make.width.equalTo(50) + make.height.equalTo(80) + make.top.equalToSuperview() + } + ride.snp.makeConstraints { make in + make.left.equalTo(run.snp.right).offset(32) + make.width.equalTo(50) + make.height.equalTo(80) + make.top.equalToSuperview() + } + walk.snp.makeConstraints { make in + make.left.equalTo(ride.snp.right).offset(32) + make.width.equalTo(50) + make.height.equalTo(80) + make.top.equalToSuperview() + } + } + @objc func runAction(){ + App.shared.goToPage(ReadyVC()) + } + @objc func rideAction(){ + + } + @objc func walkAction(){ + + } +} + +class SportTypeItem: BaseView { + private let icon = UIImageView() + private let titleLabel = UILabel() + var type:SportType = .run{ + didSet{ + titleLabel.text = type.name + } + } + override func setupViews() { + addSubviews([titleLabel,icon]) + icon.do { v in + v.image = UIImage(named: type.icon) + } + titleLabel.do { v in + v.textColor = .color(.first) + v.font = .regular(10) + } + } + + override func setupLayout() { + icon.snp.makeConstraints { make in + make.size.equalTo(50) + make.top.equalToSuperview() + make.centerX.equalToSuperview() + } + titleLabel.snp.makeConstraints { make in + make.top.equalTo(icon.snp.bottom).offset(5) + make.centerX.equalTo(icon) + } + } +} diff --git a/ShenYin/ShenYin/UI/Sport/SportHomeVC.swift b/ShenYin/ShenYin/UI/Sport/SportHomeVC.swift index 6c82a0d..4a4f320 100644 --- a/ShenYin/ShenYin/UI/Sport/SportHomeVC.swift +++ b/ShenYin/ShenYin/UI/Sport/SportHomeVC.swift @@ -43,6 +43,7 @@ class SportHomeVC: BaseVC { // AudioPlayView.shared.show() self.view.addSubview(AudioPlayView.shared) +// MapManager.shared.setupSdk() } override func setupLayout(){ diff --git a/ShenYin/podfile b/ShenYin/podfile index a998e1e..52aaa18 100644 --- a/ShenYin/podfile +++ b/ShenYin/podfile @@ -49,10 +49,12 @@ target 'ShenYin' do pod 'HorizonCalendar'#日历 -# pod 'DSWaveformImage' + + #高德地图 + pod 'AMap3DMap-NO-IDFA', '10.0.700' + pod 'AMapLocation-NO-IDFA' + pod 'AMapSearch-NO-IDFA', '9.7.0' -# pod 'NVActivityIndicatorView', '~> 5.1.1' # 最新稳定版 -# pod 'EZAudio', '~> 1.1.0' end target 'playboy' do