diff --git a/IndieMusic/IndieMusic.xcodeproj/project.pbxproj b/IndieMusic/IndieMusic.xcodeproj/project.pbxproj index ced9af9..e264f38 100644 --- a/IndieMusic/IndieMusic.xcodeproj/project.pbxproj +++ b/IndieMusic/IndieMusic.xcodeproj/project.pbxproj @@ -40,6 +40,8 @@ 7751009A2B62050C00F46109 /* UIImageView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 775100992B62050C00F46109 /* UIImageView+Rx.swift */; }; 7751009C2B62065800F46109 /* Date+IndieMusic.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7751009B2B62065800F46109 /* Date+IndieMusic.swift */; }; 7751009E2B62330900F46109 /* PopoverMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7751009D2B62330900F46109 /* PopoverMenu.swift */; }; + 775100A02B63442500F46109 /* refresh.json in Resources */ = {isa = PBXBuildFile; fileRef = 7751009F2B63442500F46109 /* refresh.json */; }; + 775100A42B6344C700F46109 /* img_0.png in Resources */ = {isa = PBXBuildFile; fileRef = 775100A32B6344C700F46109 /* img_0.png */; }; 7751D3502B42ABBF00F1F2BD /* SettingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7751D34F2B42ABBF00F1F2BD /* SettingViewController.swift */; }; 7751D3522B42AC2B00F1F2BD /* SettingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7751D3512B42AC2B00F1F2BD /* SettingView.swift */; }; 7751D3542B42AE0E00F1F2BD /* SettingViewMdel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7751D3532B42AE0E00F1F2BD /* SettingViewMdel.swift */; }; @@ -258,6 +260,8 @@ 775100992B62050C00F46109 /* UIImageView+Rx.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImageView+Rx.swift"; sourceTree = ""; }; 7751009B2B62065800F46109 /* Date+IndieMusic.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Date+IndieMusic.swift"; sourceTree = ""; }; 7751009D2B62330900F46109 /* PopoverMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PopoverMenu.swift; sourceTree = ""; }; + 7751009F2B63442500F46109 /* refresh.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = refresh.json; sourceTree = ""; }; + 775100A32B6344C700F46109 /* img_0.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = img_0.png; sourceTree = ""; }; 7751D34F2B42ABBF00F1F2BD /* SettingViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingViewController.swift; sourceTree = ""; }; 7751D3512B42AC2B00F1F2BD /* SettingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingView.swift; sourceTree = ""; }; 7751D3532B42AE0E00F1F2BD /* SettingViewMdel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingViewMdel.swift; sourceTree = ""; }; @@ -518,6 +522,23 @@ path = JournalDetail; sourceTree = ""; }; + 775100A12B63442900F46109 /* Json */ = { + isa = PBXGroup; + children = ( + 775100A22B6344C700F46109 /* images */, + 7751009F2B63442500F46109 /* refresh.json */, + ); + path = Json; + sourceTree = ""; + }; + 775100A22B6344C700F46109 /* images */ = { + isa = PBXGroup; + children = ( + 775100A32B6344C700F46109 /* img_0.png */, + ); + path = images; + sourceTree = ""; + }; 775D07562B5E47C4009270D3 /* ETPopupView */ = { isa = PBXGroup; children = ( @@ -586,6 +607,7 @@ 778B8A512AF8EA2A0034AFD4 /* Resources */ = { isa = PBXGroup; children = ( + 775100A12B63442900F46109 /* Json */, 778B8A292AF8E36E0034AFD4 /* Assets.xcassets */, 778B8A2E2AF8E36E0034AFD4 /* Info.plist */, ); @@ -1052,9 +1074,11 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 775100A42B6344C700F46109 /* img_0.png in Resources */, 778B8A2D2AF8E36E0034AFD4 /* LaunchScreen.storyboard in Resources */, 778B8A2A2AF8E36E0034AFD4 /* Assets.xcassets in Resources */, 778B8A282AF8E36D0034AFD4 /* Main.storyboard in Resources */, + 775100A02B63442500F46109 /* refresh.json in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/IndieMusic/IndieMusic/Common/NavigationController.swift b/IndieMusic/IndieMusic/Common/NavigationController.swift index b7344ce..754d23f 100644 --- a/IndieMusic/IndieMusic/Common/NavigationController.swift +++ b/IndieMusic/IndieMusic/Common/NavigationController.swift @@ -36,6 +36,7 @@ class NavigationController: UINavigationController { super.viewDidLoad() setup() + view.backgroundColor = .white let appearance = UINavigationBarAppearance() appearance.backgroundColor = .white diff --git a/IndieMusic/IndieMusic/Common/RefreshLoadingView.swift b/IndieMusic/IndieMusic/Common/RefreshLoadingView.swift index 277d842..9bcd326 100644 --- a/IndieMusic/IndieMusic/Common/RefreshLoadingView.swift +++ b/IndieMusic/IndieMusic/Common/RefreshLoadingView.swift @@ -29,8 +29,8 @@ class RefreshLoadingView: UIView { animationView.backgroundColor = .clear animationView.frame = CGRect(x: 0.0, y: 0.0, width: animationSize, height: animationSize) animationView.loopMode = .loop - animationView.animation = LottieAnimation.named("loading_header") - animationView.backgroundColor = .red + animationView.animation = LottieAnimation.named("refresh") + return animationView } diff --git a/IndieMusic/IndieMusic/Models/Journal.swift b/IndieMusic/IndieMusic/Models/Journal.swift index 03e90ff..5379e4f 100644 --- a/IndieMusic/IndieMusic/Models/Journal.swift +++ b/IndieMusic/IndieMusic/Models/Journal.swift @@ -18,7 +18,7 @@ struct JournalDetail: Codable { let tags: [String]? let date: Int? let content: String? -// let isExpand: Bool? + var isExpand: Bool? } struct Journal: Codable { diff --git a/IndieMusic/IndieMusic/Modules/JournalDetail/JournalDetailController.swift b/IndieMusic/IndieMusic/Modules/JournalDetail/JournalDetailController.swift index e7ffc69..211a37d 100644 --- a/IndieMusic/IndieMusic/Modules/JournalDetail/JournalDetailController.swift +++ b/IndieMusic/IndieMusic/Modules/JournalDetail/JournalDetailController.swift @@ -11,6 +11,7 @@ import RxCocoa import RxDataSources import ETNavBarTransparent import SVProgressHUD +import RxOptional class JournalDetailController: ViewController, UIScrollViewDelegate { @@ -70,6 +71,9 @@ class JournalDetailController: ViewController, UIScrollViewDelegate { return collectionView }() + weak var audioHeaderView: JournalAudioHeaderView? + + var commentToolView: CommentToolView = { let commentToolView = CommentToolView.init() @@ -151,13 +155,18 @@ class JournalDetailController: ViewController, UIScrollViewDelegate { } }, - configureSupplementaryView: { dataSource, collectionView, kind, indexPath in - guard kind == UICollectionView.elementKindSectionHeader else { + configureSupplementaryView: { [weak self] dataSource, collectionView, kind, indexPath in + guard kind == UICollectionView.elementKindSectionHeader, let self = self else { return UICollectionReusableView() } if indexPath.section == 0 { let resuableView: JournalAudioHeaderView = collectionView.dequeueReusableSupplementaryView(ofKind: "UICollectionElementKindSectionHeader", withReuseIdentifier: "JournalAudioHeaderView", for: indexPath) as! JournalAudioHeaderView + self.audioHeaderView = resuableView + let section = dataSource.sectionModels.first.value + resuableView.journalDetail = section?.header + + resuableView.saveButton.rx.tap.subscribe { _ in resuableView.titleImageView.image?.saveImageToPhotoLibrary() @@ -171,15 +180,17 @@ class JournalDetailController: ViewController, UIScrollViewDelegate { }.disposed(by: self.rx.disposeBag) - resuableView.journalDetail = section?.header resuableView.dropButtonTapObservable.subscribe { _ in - viewModel.isExpand.accept(!viewModel.isExpand.value) - resuableView.isExpand = viewModel.isExpand.value + viewModel.isExpand.accept(!resuableView.isExpand) + viewModel.updateHeaderHeight(newHeight: viewModel.isExpand.value ? 506 + BaseDimensions.topHeight : 400 + BaseDimensions.topHeight) + +// resuableView.isExpand = viewModel.isExpand.value }.disposed(by: self.rx.disposeBag) + resuableView.playButtonTapObservable.subscribe { _ in - + AudioManager.sharedInstance.playlist }.disposed(by: self.rx.disposeBag) resuableView.downLoadButtonTapObservable.subscribe { _ in @@ -206,40 +217,53 @@ class JournalDetailController: ViewController, UIScrollViewDelegate { output.items.bind(to: collectionView.rx.items(dataSource: dataSource)).disposed(by: rx.disposeBag) - - output.itemSelected.subscribe { [weak self] sectionItem in -// guard let items = output.items.value.first?.items, -// let track = sectionItem.element else { return } -// -// -// -// let playerViewModel = PlayerViewModel.init(track: track, provider: viewModel.provider) -// self?.navigator.show(segue: .player(viewModel: playerViewModel), sender: self, transition: .modal) -// -// AudioManager.sharedInstance.setPlaylist(list: items) -// AudioManager.sharedInstance.playTrack(track: track) + input.selection.drive { indexPath in + }.disposed(by: rx.disposeBag) - - -// _ = self.headerView.dropButton.rx.isSelected <-> viewModel.isExpand -// viewModel.isExpand -// .bind(to: self.headerView.dropButton.rx.isSelected) -// .disposed(by: rx.disposeBag) - output.isExpand.subscribe { [weak self] isExpand in + output.itemSelected.subscribe { [weak self] sectionItem in -// print("dropButtonTrigger \(isExpand)") -// self?.headerView.isExpand = isExpand + switch sectionItem { + case .audioItem(let track): + let audioModels: [AudioTrack] = output.items.value.flatMap { section -> [JournalItem] in + switch section { + case .audio(_, let items): + return items + default: + return [] + } + }.compactMap { item -> AudioTrack? in + if case let .audioItem(model) = item { + return model + } else { + return nil + } + } - viewModel.updateHeaderHeight(newHeight: isExpand ? 506 + BaseDimensions.topHeight : 400 + BaseDimensions.topHeight) - - self?.collectionView.collectionViewLayout.invalidateLayout() + + let playerViewModel = PlayerViewModel.init(track: track, provider: viewModel.provider) + self?.navigator.show(segue: .player(viewModel: playerViewModel), sender: self, transition: .modal) + + + AudioManager.sharedInstance.setPlaylist(list: audioModels) + AudioManager.sharedInstance.playTrack(track: track) + + + + + + case .journaItem(let _): - } .disposed(by: rx.disposeBag) - + break + } + + + + }.disposed(by: rx.disposeBag) + } diff --git a/IndieMusic/IndieMusic/Modules/JournalDetail/JournalDetailView.swift b/IndieMusic/IndieMusic/Modules/JournalDetail/JournalDetailView.swift index b584744..682f9fe 100644 --- a/IndieMusic/IndieMusic/Modules/JournalDetail/JournalDetailView.swift +++ b/IndieMusic/IndieMusic/Modules/JournalDetail/JournalDetailView.swift @@ -156,7 +156,7 @@ class JournalAudioHeaderView: UICollectionReusableView { var isExpand = false { didSet { - + print("JournalAudioHeaderView isExpand: \(isExpand) ") switch isExpand { case true: dropButton.isSelected = true @@ -211,6 +211,7 @@ class JournalAudioHeaderView: UICollectionReusableView { contentLabel.text = journalDetail.content + self.isExpand = journalDetail.isExpand ?? false } } diff --git a/IndieMusic/IndieMusic/Modules/JournalDetail/JournalDetailViewModel.swift b/IndieMusic/IndieMusic/Modules/JournalDetail/JournalDetailViewModel.swift index cecf612..ee5c129 100644 --- a/IndieMusic/IndieMusic/Modules/JournalDetail/JournalDetailViewModel.swift +++ b/IndieMusic/IndieMusic/Modules/JournalDetail/JournalDetailViewModel.swift @@ -25,7 +25,7 @@ class JournalDetailViewModel: ViewModel, ViewModelType { struct Output { let items: BehaviorRelay<[JournalSection]> let selection: Driver - let itemSelected: PublishSubject + let itemSelected: PublishSubject let journalDetail: PublishSubject @@ -35,7 +35,7 @@ class JournalDetailViewModel: ViewModel, ViewModelType { let isExpand: BehaviorRelay } - let itemSelected = PublishSubject() + let itemSelected = PublishSubject() // let items = BehaviorRelay<[JournalSection]>.init(value: []) let isExpand = BehaviorRelay.init(value: false) @@ -57,42 +57,18 @@ class JournalDetailViewModel: ViewModel, ViewModelType { }.disposed(by: rx.disposeBag) - -// input.dropButtonTrigger.drive { _ in -// -// self.isExpand.accept(!self.isExpand.value) -// -// }.disposed(by: rx.disposeBag) - - -// -// let journalDetail = JournalDetail.init(audio: "", cover: "", title: "", artist: "", number: "", tags: [], date: 0, content: "", isExpand: false) -// let item = AudioTrack.init(artists: [], availableMarkets: [""], discNumber: 0, durationMs: 0, explicit: false, externalUrls: ["": ""], id: "", name: "123", previewUrl: "") -// -// let journalSection = JournalSection.init(items: [item, item, item, item], journalDetail: journalDetail) -// -// items.accept([journalSection]) - - - input.selection.drive { indexPath in -// guard let sectionItem = elements.value.first?.items[indexPath.row] else { return } -// self.itemSelected.onNext(sectionItem) - }.disposed(by: rx.disposeBag) - let journal = PublishSubject.init() let currentPlaying: PublishSubject = .init() let dowloadState: Driver = .just(0) let isLike = BehaviorRelay.init(value: false) - - let isLick = BehaviorRelay.init(value: false) self.requestMusic(journalNo: journalNo).subscribe { audioTrackArray in - let journalDetail = JournalDetail.init(audio: "", cover: "https://img-prod-cms-rt-microsoft-com.akamaized.net/cms/api/am/imageFileData/RE4wB6X?ver=c628", title: "132", artist: "132132132132132", number: "321", tags: [], date: 1706062128, content: "总在不经意间获得简单朴素且乐趣其中的感怀,这种感怀的妙处在于它没有试图去提炼出任何的真理,他就像我们恬然的谈话里总夹杂着“那我懂你的意思了”,但是否是真的明白,却不然得知。即总在不经意间获得简单朴素且乐趣其中的感怀,这种感怀的妙处在于它没有试图去提炼出任何的真理,他就像我们恬然的谈话里总夹杂着“那我懂你的意思了”,但是否是真的明白,却不然得知。即总在不经意间获得简单朴素且乐趣其中的感怀,这种感怀的妙处在于它没有试图去提炼出任何的真理,他就像我们恬然的谈话里总夹杂着“那我懂你的意思了”,但是否是真的明白,却不然得知。即总在不经意间获得简单朴素且乐趣其中的感怀,这种感怀的妙处在于它没有试图去提炼出任何的真理,他就像我们恬然的谈话里总夹杂着“那我懂你的意思了”,但是否是真的明白,却不然得知。即") + let journalDetail = JournalDetail.init(audio: "", cover: "https://img-prod-cms-rt-microsoft-com.akamaized.net/cms/api/am/imageFileData/RE4wB6X?ver=c628", title: "132", artist: "132132132132132", number: "321", tags: [], date: 1706062128, content: "总在不经意间获得简单朴素且乐趣其中的感怀,这种感怀的妙处在于它没有试图去提炼出任何的真理,他就像我们恬然的谈话里总夹杂着“那我懂你的意思了”,但是否是真的明白,却不然得知。即总在不经意间获得简单朴素且乐趣其中的感怀,这种感怀的妙处在于它没有试图去提炼出任何的真理,他就像我们恬然的谈话里总夹杂着“那我懂你的意思了”,但是否是真的明白,却不然得知。即总在不经意间获得简单朴素且乐趣其中的感怀,这种感怀的妙处在于它没有试图去提炼出任何的真理,他就像我们恬然的谈话里总夹杂着“那我懂你的意思了”,但是否是真的明白,却不然得知。即总在不经意间获得简单朴素且乐趣其中的感怀,这种感怀的妙处在于它没有试图去提炼出任何的真理,他就像我们恬然的谈话里总夹杂着“那我懂你的意思了”,但是否是真的明白,却不然得知。即", isExpand: false) let audioArray = audioTrackArray.map { audioTrack in @@ -112,6 +88,31 @@ class JournalDetailViewModel: ViewModel, ViewModelType { } onError: { error in }.disposed(by: rx.disposeBag) + + + input.selection.drive { indexPath in + let sectionItem = elements.value[indexPath.section].items[indexPath.row] + self.itemSelected.onNext(sectionItem) + }.disposed(by: rx.disposeBag) + + + + isExpand.subscribe { isExpand in + var new = elements.value + if var header = new.first?.header { + header.isExpand = isExpand + + if let items = new.first?.items { + new[0] = .audio(header: header, items: items) + elements.accept(new) + } + } + + }.disposed(by: rx.disposeBag) + + + + // input.dropButtonTrigger.drive { _ in @@ -142,6 +143,7 @@ class JournalDetailViewModel: ViewModel, ViewModelType { + func requestMusic(journalNo: String) -> Observable<[AudioTrack]> { return self.provider.journalMusic(journalNo: journalNo) diff --git a/IndieMusic/IndieMusic/Modules/Message/MessageViewController.swift b/IndieMusic/IndieMusic/Modules/Message/MessageViewController.swift index 60f03e3..1f07f51 100644 --- a/IndieMusic/IndieMusic/Modules/Message/MessageViewController.swift +++ b/IndieMusic/IndieMusic/Modules/Message/MessageViewController.swift @@ -90,11 +90,6 @@ class MessageViewController: ViewController, UIScrollViewDelegate { view.addSubview(messageTopView) view.addSubview(tableView) view.addSubview(noDataView) - - - - - } override func bindViewModel() { @@ -131,13 +126,10 @@ class MessageViewController: ViewController, UIScrollViewDelegate { return cell - - case .activitiesItem(let message): let cell: MessageActivitiesViewCell = tableView.dequeueReusableCell(withIdentifier: "MessageActivitiesViewCell", for: indexPath) as! MessageActivitiesViewCell return cell - } } ) diff --git a/IndieMusic/IndieMusic/Modules/Player/AudioTrackListViewModel.swift b/IndieMusic/IndieMusic/Modules/Player/AudioTrackListViewModel.swift index d8e3e26..aa301e6 100644 --- a/IndieMusic/IndieMusic/Modules/Player/AudioTrackListViewModel.swift +++ b/IndieMusic/IndieMusic/Modules/Player/AudioTrackListViewModel.swift @@ -35,7 +35,7 @@ class AudioTrackListViewModel: ViewModel, ViewModelType { func transform(input: Input) -> Output { - let journalDetail = JournalDetail.init(audio: "", cover: "", title: "", artist: "", number: "", tags: [], date: 0, content: "") + let journalDetail = JournalDetail.init(audio: "", cover: "", title: "", artist: "", number: "", tags: [], date: 0, content: "", isExpand: false) // let item = AudioTrack.init(artists: [], availableMarkets: [""], discNumber: 0, durationMs: 0, explicit: false, externalUrls: ["": ""], id: "", name: "123", previewUrl: "") // // let item1 = AudioTrack.init(artists: [], availableMarkets: [""], discNumber: 0, durationMs: 0, explicit: false, externalUrls: ["": ""], id: "", name: "123", previewUrl: "", isPlaying: true) diff --git a/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json b/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json index 13613e3..0b8f485 100644 --- a/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,8 +1,115 @@ { "images" : [ { + "filename" : "icon-20@2x.png", "idiom" : "universal", "platform" : "ios", + "scale" : "2x", + "size" : "20x20" + }, + { + "filename" : "icon-20@3x.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "3x", + "size" : "20x20" + }, + { + "filename" : "icon-29@2x.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "29x29" + }, + { + "filename" : "icon-29@3x.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "3x", + "size" : "29x29" + }, + { + "filename" : "icon-38@2x.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "38x38" + }, + { + "filename" : "icon-38@3x.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "3x", + "size" : "38x38" + }, + { + "filename" : "icon-40@2x.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "40x40" + }, + { + "filename" : "icon-40@3x.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "3x", + "size" : "40x40" + }, + { + "filename" : "icon-60@2x.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "60x60" + }, + { + "filename" : "icon-60@3x.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "3x", + "size" : "60x60" + }, + { + "filename" : "icon-64@2x.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "64x64" + }, + { + "filename" : "icon-64@3x.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "3x", + "size" : "64x64" + }, + { + "filename" : "icon-68@2x.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "68x68" + }, + { + "filename" : "icon-76@2x.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "76x76" + }, + { + "filename" : "icon-83.5@2x.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "filename" : "icon-1024.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "1x", "size" : "1024x1024" } ], diff --git a/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-1024.png b/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-1024.png new file mode 100644 index 0000000..732ea0f Binary files /dev/null and b/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-1024.png differ diff --git a/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png b/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png new file mode 100644 index 0000000..14999bb Binary files /dev/null and b/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png differ diff --git a/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png b/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png new file mode 100644 index 0000000..656de20 Binary files /dev/null and b/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png differ diff --git a/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png b/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png new file mode 100644 index 0000000..2482d04 Binary files /dev/null and b/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png differ diff --git a/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png b/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png new file mode 100644 index 0000000..2b79808 Binary files /dev/null and b/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png differ diff --git a/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-38@2x.png b/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-38@2x.png new file mode 100644 index 0000000..46e9833 Binary files /dev/null and b/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-38@2x.png differ diff --git a/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-38@3x.png b/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-38@3x.png new file mode 100644 index 0000000..e2fa8fb Binary files /dev/null and b/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-38@3x.png differ diff --git a/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png b/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png new file mode 100644 index 0000000..09979eb Binary files /dev/null and b/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png differ diff --git a/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png b/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png new file mode 100644 index 0000000..6e9aa98 Binary files /dev/null and b/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png differ diff --git a/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png b/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png new file mode 100644 index 0000000..6e9aa98 Binary files /dev/null and b/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png differ diff --git a/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png b/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png new file mode 100644 index 0000000..8d227b6 Binary files /dev/null and b/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png differ diff --git a/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-64@2x.png b/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-64@2x.png new file mode 100644 index 0000000..dc11dc2 Binary files /dev/null and b/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-64@2x.png differ diff --git a/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-64@3x.png b/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-64@3x.png new file mode 100644 index 0000000..be96c25 Binary files /dev/null and b/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-64@3x.png differ diff --git a/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-68@2x.png b/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-68@2x.png new file mode 100644 index 0000000..f64eebf Binary files /dev/null and b/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-68@2x.png differ diff --git a/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png b/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png new file mode 100644 index 0000000..181eb40 Binary files /dev/null and b/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png differ diff --git a/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png b/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png new file mode 100644 index 0000000..7e0ba67 Binary files /dev/null and b/IndieMusic/IndieMusic/Resources/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png differ diff --git a/IndieMusic/IndieMusic/Resources/Json/images/img_0.png b/IndieMusic/IndieMusic/Resources/Json/images/img_0.png new file mode 100644 index 0000000..e6516f3 Binary files /dev/null and b/IndieMusic/IndieMusic/Resources/Json/images/img_0.png differ diff --git a/IndieMusic/IndieMusic/Resources/Json/refresh.json b/IndieMusic/IndieMusic/Resources/Json/refresh.json new file mode 100644 index 0000000..d89b37f --- /dev/null +++ b/IndieMusic/IndieMusic/Resources/Json/refresh.json @@ -0,0 +1 @@ +{"v":"5.10.0","fr":25,"ip":0,"op":60,"w":600,"h":600,"nm":"刷新2","ddd":0,"assets":[{"id":"image_0","w":403,"h":397,"u":"images/","p":"img_0.png","e":0}],"layers":[{"ddd":0,"ind":1,"ty":2,"nm":"图层 1/落网-刷新2.ai","cl":"ai","refId":"image_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[285.563,226,0],"ix":2,"l":2},"a":{"a":0,"k":[201.5,198.5,0],"ix":1,"l":2},"s":{"a":0,"k":[84,84,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":65,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"线条1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[340.25,338.491,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-30.747,0.367],[-35.209,-1.729],[-36.845,2.053],[-23.184,-4.838],[-33.248,21.411]],"o":[[11.571,-8.138],[28.998,-0.346],[37.024,1.818],[35.701,-1.989],[35.387,7.384],[31.551,-22.749]],"v":[[-258.613,128.679],[-185.009,105.429],[-97.813,121.395],[4.221,101.331],[82.51,115.879],[181.994,103.447]],"c":false},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"形状 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.228],"y":[1.164]},"t":0,"s":[0]},{"t":46,"s":[100]}],"ix":1},"e":{"a":0,"k":0,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"修剪路径 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":65,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"线条2","sr":1,"ks":{"o":{"a":0,"k":60,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[340.25,385.491,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-30.747,0.367],[-35.209,-1.729],[-36.845,2.053],[-23.184,-4.838],[-33.248,21.411]],"o":[[11.571,-8.138],[28.998,-0.346],[37.024,1.818],[35.701,-1.989],[35.387,7.384],[31.551,-22.749]],"v":[[-258.613,128.679],[-185.009,105.429],[-97.813,121.395],[4.221,101.331],[82.51,115.879],[181.994,103.447]],"c":false},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"形状 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.228],"y":[1.164]},"t":0,"s":[0]},{"t":46,"s":[100]}],"ix":1},"e":{"a":0,"k":0,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"修剪路径 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":65,"st":0,"ct":1,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"线条3","sr":1,"ks":{"o":{"a":0,"k":20,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[340.25,432.491,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-30.747,0.367],[-35.209,-1.729],[-36.845,2.053],[-23.184,-4.838],[-33.248,21.411]],"o":[[11.571,-8.138],[28.998,-0.346],[37.024,1.818],[35.701,-1.989],[35.387,7.384],[31.551,-22.749]],"v":[[-258.613,128.679],[-185.009,105.429],[-97.813,121.395],[4.221,101.331],[82.51,115.879],[181.994,103.447]],"c":false},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"形状 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.228],"y":[1.164]},"t":0,"s":[0]},{"t":46,"s":[100]}],"ix":1},"e":{"a":0,"k":0,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"修剪路径 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":65,"st":0,"ct":1,"bm":0}],"markers":[]} \ No newline at end of file