parent
c8a3ef59ca
commit
1062a4c0e3
@ -0,0 +1,19 @@
|
||||
//
|
||||
// MessageViewController.swift
|
||||
// IndieMusic
|
||||
//
|
||||
// Created by WenLei on 2024/1/7.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
class MessageViewController: ViewController {
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
|
||||
// Do any additional setup after loading the view.
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,94 @@
|
||||
//
|
||||
// MessageViewModel.swift
|
||||
// IndieMusic
|
||||
//
|
||||
// Created by WenLei on 2024/1/7.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import RxSwift
|
||||
import RxCocoa
|
||||
|
||||
class MessageViewModel: ViewModel, ViewModelType {
|
||||
|
||||
struct Input {
|
||||
let viewWillAppear: ControlEvent<Bool>
|
||||
let selection: Driver<IndexPath>
|
||||
|
||||
let dropButtonTrigger: Driver<Void>
|
||||
let playButtonTrigger: Driver<Void>
|
||||
let shareButtonTrigger: Driver<Void>
|
||||
// let moreButtonTrigger: Driver<AudioTrack>
|
||||
|
||||
}
|
||||
|
||||
struct Output {
|
||||
let items: BehaviorRelay<[JournalSection]>
|
||||
let selection: Driver<IndexPath>
|
||||
let itemSelected: PublishSubject<AudioTrack>
|
||||
|
||||
let journalDetail: PublishSubject<JournalDetail>
|
||||
|
||||
let currentPlaying: PublishSubject<AudioTrack>
|
||||
let dowloadState: Driver<Float>
|
||||
let isLike: BehaviorRelay<Bool>
|
||||
let isExpand: BehaviorRelay<Bool>
|
||||
}
|
||||
|
||||
let itemSelected = PublishSubject<AudioTrack>()
|
||||
let items = BehaviorRelay<[JournalSection]>.init(value: [])
|
||||
|
||||
let isExpand = BehaviorRelay<Bool>.init(value: false)
|
||||
|
||||
|
||||
func transform(input: Input) -> Output {
|
||||
|
||||
input.viewWillAppear.subscribe { (_) in
|
||||
|
||||
}.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 = self.items.value.first?.items[indexPath.row] else { return }
|
||||
self.itemSelected.onNext(sectionItem)
|
||||
}.disposed(by: rx.disposeBag)
|
||||
|
||||
|
||||
let journal = PublishSubject<JournalDetail>.init()
|
||||
|
||||
let currentPlaying: PublishSubject<AudioTrack> = .init()
|
||||
let dowloadState: Driver<Float> = .just(0)
|
||||
let isLike = BehaviorRelay<Bool>.init(value: false)
|
||||
|
||||
let isLick = BehaviorRelay<Bool>.init(value: false)
|
||||
|
||||
return Output.init(items: items,
|
||||
selection: input.selection,
|
||||
itemSelected: itemSelected,
|
||||
journalDetail: journal,
|
||||
currentPlaying: currentPlaying,
|
||||
dowloadState: dowloadState,
|
||||
isLike: isLike,
|
||||
isExpand: isExpand
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,123 @@
|
||||
//
|
||||
// MineJournalViewController.swift
|
||||
// IndieMusic
|
||||
//
|
||||
// Created by WenLei on 2024/1/7.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
import RxSwift
|
||||
import RxCocoa
|
||||
import RxDataSources
|
||||
|
||||
class MineJournalViewController: ViewController {
|
||||
|
||||
let mineSingleNoDataView: MineSingleNoDataView = {
|
||||
let mineSingleNoDataView = MineSingleNoDataView.init()
|
||||
mineSingleNoDataView.isHidden = true
|
||||
return mineSingleNoDataView
|
||||
}()
|
||||
|
||||
let collectionView: UICollectionView = {
|
||||
let layout = UICollectionViewFlowLayout()
|
||||
layout.minimumInteritemSpacing = 15
|
||||
layout.minimumLineSpacing = 24
|
||||
|
||||
layout.sectionInset = UIEdgeInsets.init(top: 0, left: 18, bottom: 0, right: 18)
|
||||
|
||||
layout.itemSize = CGSize(width: (BaseDimensions.screenWidth - 18 * 2 - 15) / 2, height: 147)
|
||||
|
||||
let collectionView = UICollectionView.init(frame: CGRect.zero, collectionViewLayout: layout)
|
||||
|
||||
collectionView.register(MusicStyleCellView.self, forCellWithReuseIdentifier: "MusicStyleCellView")
|
||||
|
||||
|
||||
return collectionView
|
||||
}()
|
||||
|
||||
|
||||
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
|
||||
// Do any additional setup after loading the view.
|
||||
}
|
||||
|
||||
|
||||
override func makeUI() {
|
||||
super.makeUI()
|
||||
|
||||
self.navigationItem.title = "期刊"
|
||||
|
||||
view.backgroundColor = .white
|
||||
|
||||
|
||||
view.addSubview(mineSingleNoDataView)
|
||||
view.addSubview(collectionView)
|
||||
}
|
||||
|
||||
override func bindViewModel() {
|
||||
super.bindViewModel()
|
||||
|
||||
guard let viewModel = viewModel as? MineJournalViewModel else { return }
|
||||
|
||||
let input = MineJournalViewModel.Input.init(viewWillAppear: rx.viewWillAppear,
|
||||
selection: collectionView.rx.itemSelected.asDriver())
|
||||
|
||||
let output = viewModel.transform(input: input)
|
||||
|
||||
let dataSource = MusicStyleViewController.dataSource()
|
||||
|
||||
output.items.bind(to: collectionView.rx.items(dataSource: dataSource)).disposed(by: rx.disposeBag)
|
||||
|
||||
|
||||
output.itemSelected.subscribe { sectionItem in
|
||||
|
||||
switch sectionItem {
|
||||
default: break
|
||||
}
|
||||
|
||||
}.disposed(by: rx.disposeBag)
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
override func viewDidLayoutSubviews() {
|
||||
super.viewDidLayoutSubviews()
|
||||
|
||||
mineSingleNoDataView.snp.makeConstraints { make in
|
||||
make.left.equalTo(view)
|
||||
make.right.equalTo(view)
|
||||
make.top.equalTo(view)
|
||||
make.height.equalTo(200)
|
||||
}
|
||||
|
||||
collectionView.snp.makeConstraints { make in
|
||||
make.left.equalTo(view)
|
||||
make.right.equalTo(view)
|
||||
make.top.equalTo(view)
|
||||
make.bottom.equalTo(view)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extension MineJournalViewController {
|
||||
static func dataSource() -> RxCollectionViewSectionedReloadDataSource<MusicStyleSection> {
|
||||
return RxCollectionViewSectionedReloadDataSource<MusicStyleSection>(
|
||||
configureCell: { dataSource, collectionView, indexPath, item in
|
||||
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "MusicStyleCellView", for: indexPath) as! MusicStyleCellView
|
||||
cell.titleLabel.text = item.title
|
||||
cell.volLabel.text = item.subTitle
|
||||
|
||||
return cell
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,60 @@
|
||||
//
|
||||
// MineJournalViewModel.swift
|
||||
// IndieMusic
|
||||
//
|
||||
// Created by WenLei on 2024/1/7.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import RxSwift
|
||||
import RxCocoa
|
||||
|
||||
class MineJournalViewModel: ViewModel, ViewModelType {
|
||||
|
||||
struct Input {
|
||||
let viewWillAppear: ControlEvent<Bool>
|
||||
let selection: Driver<IndexPath>
|
||||
}
|
||||
|
||||
struct Output {
|
||||
let items: BehaviorRelay<[MusicStyleSection]>
|
||||
let selection: Driver<IndexPath>
|
||||
let itemSelected: PublishSubject<MusicStyle>
|
||||
|
||||
}
|
||||
|
||||
let itemSelected = PublishSubject<MusicStyle>()
|
||||
let items = BehaviorRelay<[MusicStyleSection]>.init(value: [])
|
||||
|
||||
|
||||
func transform(input: Input) -> Output {
|
||||
|
||||
input.viewWillAppear.subscribe { (_) in
|
||||
|
||||
}.disposed(by: rx.disposeBag)
|
||||
|
||||
|
||||
|
||||
let item = MusicStyle.init(title: "测试", subTitle: "123", backgroundImage: "")
|
||||
let musicStyleSection = MusicStyleSection.init(items: [item, item, item, item], header: "后摇", headerSub: "Post Rock", content: "总在不经意间获得简单朴素且乐趣其中的感怀,这种感怀的妙处在于它没有试图去提炼出任何的真理,他就像我们恬然的谈话里总夹杂着“那我懂你的意思了”,但是否是真的明白,却不然得知。即", isExpand: false)
|
||||
|
||||
|
||||
items.accept([musicStyleSection])
|
||||
|
||||
|
||||
input.selection.drive { indexPath in
|
||||
guard let sectionItem = self.items.value.first?.items[indexPath.row] else { return }
|
||||
self.itemSelected.onNext(sectionItem)
|
||||
}.disposed(by: rx.disposeBag)
|
||||
|
||||
|
||||
let journal = PublishSubject<JournalDetail>.init()
|
||||
|
||||
|
||||
return Output.init(items: items,
|
||||
selection: input.selection,
|
||||
itemSelected: itemSelected
|
||||
)
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,77 @@
|
||||
//
|
||||
// AboutViewModel.swift
|
||||
// IndieMusic
|
||||
//
|
||||
// Created by WenLei on 2024/1/7.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import RxSwift
|
||||
import RxCocoa
|
||||
|
||||
class AboutViewModel: ViewModel, ViewModelType {
|
||||
|
||||
struct Input {
|
||||
let viewWillAppear: ControlEvent<Bool>
|
||||
let selection: Driver<IndexPath>
|
||||
|
||||
}
|
||||
|
||||
struct Output {
|
||||
let items: BehaviorRelay<[SettingSection]>
|
||||
let selection: Driver<IndexPath>
|
||||
let itemSelected: PublishSubject<Setting>
|
||||
|
||||
}
|
||||
|
||||
let itemSelected = PublishSubject<Setting>()
|
||||
let items = BehaviorRelay<[SettingSection]>.init(value: [])
|
||||
|
||||
func transform(input: Input) -> Output {
|
||||
|
||||
input.viewWillAppear.subscribe { (_) in
|
||||
|
||||
}.disposed(by: rx.disposeBag)
|
||||
|
||||
let score = Setting.init(title: "给我们评分", detail: "", arrowIcon: "setting_arrow")
|
||||
let service = Setting.init(title: "在线客服", detail: "400609213", arrowIcon: "")
|
||||
let wechat = Setting.init(title: "微信公众号", detail: "雀乐", arrowIcon: "")
|
||||
|
||||
|
||||
//TODO
|
||||
items.accept([SettingSection.init(items: [.setting(score), .setting(service), .setting(wechat)])])
|
||||
|
||||
|
||||
input.selection.drive { indexPath in
|
||||
guard let sectionItem = self.items.value.first?.items[indexPath.row] else { return }
|
||||
|
||||
|
||||
switch sectionItem {
|
||||
case .about(let setting):
|
||||
|
||||
// case .account(let setting):
|
||||
// case .privacy(let setting):
|
||||
// case .timing(let setting):
|
||||
// case .cache(let setting):
|
||||
// case .permission(let setting):
|
||||
// case .feedback(let setting):
|
||||
// case .about(let setting):
|
||||
// case .contributors(let setting):
|
||||
// case .version(let setting):
|
||||
|
||||
self.itemSelected.onNext(setting)
|
||||
|
||||
default: break
|
||||
|
||||
}
|
||||
|
||||
}.disposed(by: rx.disposeBag)
|
||||
|
||||
|
||||
|
||||
return Output.init(items: items,
|
||||
selection: input.selection,
|
||||
itemSelected: itemSelected)
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,77 @@
|
||||
//
|
||||
// CacheViewModel.swift
|
||||
// IndieMusic
|
||||
//
|
||||
// Created by WenLei on 2024/1/7.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import RxSwift
|
||||
import RxCocoa
|
||||
|
||||
class CacheViewModel: ViewModel, ViewModelType {
|
||||
|
||||
struct Input {
|
||||
let viewWillAppear: ControlEvent<Bool>
|
||||
let selection: Driver<IndexPath>
|
||||
|
||||
}
|
||||
|
||||
struct Output {
|
||||
let items: BehaviorRelay<[SettingSection]>
|
||||
let selection: Driver<IndexPath>
|
||||
let itemSelected: PublishSubject<Setting>
|
||||
|
||||
}
|
||||
|
||||
let itemSelected = PublishSubject<Setting>()
|
||||
let items = BehaviorRelay<[SettingSection]>.init(value: [])
|
||||
|
||||
func transform(input: Input) -> Output {
|
||||
|
||||
input.viewWillAppear.subscribe { (_) in
|
||||
|
||||
}.disposed(by: rx.disposeBag)
|
||||
|
||||
let phone = Setting.init(title: "手机号", detail: "去绑定", arrowIcon: "setting_arrow")
|
||||
let wechatBinding = Setting.init(title: "绑定微信", detail: "", arrowIcon: "setting_arrow")
|
||||
let privacy = Setting.init(title: "注销账户", detail: "", arrowIcon: "setting_arrow")
|
||||
|
||||
|
||||
//TODO
|
||||
items.accept([SettingSection.init(items: [.setting(phone), .setting(wechatBinding), .setting(privacy)])])
|
||||
|
||||
|
||||
input.selection.drive { indexPath in
|
||||
guard let sectionItem = self.items.value.first?.items[indexPath.row] else { return }
|
||||
|
||||
|
||||
switch sectionItem {
|
||||
case .about(let setting):
|
||||
|
||||
// case .account(let setting):
|
||||
// case .privacy(let setting):
|
||||
// case .timing(let setting):
|
||||
// case .cache(let setting):
|
||||
// case .permission(let setting):
|
||||
// case .feedback(let setting):
|
||||
// case .about(let setting):
|
||||
// case .contributors(let setting):
|
||||
// case .version(let setting):
|
||||
|
||||
self.itemSelected.onNext(setting)
|
||||
|
||||
default: break
|
||||
|
||||
}
|
||||
|
||||
}.disposed(by: rx.disposeBag)
|
||||
|
||||
|
||||
|
||||
return Output.init(items: items,
|
||||
selection: input.selection,
|
||||
itemSelected: itemSelected)
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,78 @@
|
||||
//
|
||||
// PrivacyViewModel.swift
|
||||
// IndieMusic
|
||||
//
|
||||
// Created by WenLei on 2024/1/7.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import RxSwift
|
||||
import RxCocoa
|
||||
|
||||
class PrivacyViewModel: ViewModel, ViewModelType {
|
||||
|
||||
struct Input {
|
||||
let viewWillAppear: ControlEvent<Bool>
|
||||
let selection: Driver<IndexPath>
|
||||
|
||||
}
|
||||
|
||||
struct Output {
|
||||
let items: BehaviorRelay<[SettingSection]>
|
||||
let selection: Driver<IndexPath>
|
||||
let itemSelected: PublishSubject<Setting>
|
||||
|
||||
}
|
||||
|
||||
let itemSelected = PublishSubject<Setting>()
|
||||
let items = BehaviorRelay<[SettingSection]>.init(value: [])
|
||||
|
||||
func transform(input: Input) -> Output {
|
||||
|
||||
input.viewWillAppear.subscribe { (_) in
|
||||
|
||||
}.disposed(by: rx.disposeBag)
|
||||
|
||||
let like = Setting.init(title: "点赞通知", detail: "", arrowIcon: "setting_arrow")
|
||||
let follower = Setting.init(title: "新增关注通知", detail: "", arrowIcon: "setting_arrow")
|
||||
let privateMessages = Setting.init(title: "私信", detail: "", arrowIcon: "setting_arrow")
|
||||
let push = Setting.init(title: "系统推送", detail: "", arrowIcon: "setting_arrow")
|
||||
|
||||
|
||||
//TODO
|
||||
items.accept([SettingSection.init(items: [.setting(like), .setting(follower), .setting(privateMessages), .setting(push)])])
|
||||
|
||||
|
||||
input.selection.drive { indexPath in
|
||||
guard let sectionItem = self.items.value.first?.items[indexPath.row] else { return }
|
||||
|
||||
|
||||
switch sectionItem {
|
||||
case .about(let setting):
|
||||
|
||||
// case .account(let setting):
|
||||
// case .privacy(let setting):
|
||||
// case .timing(let setting):
|
||||
// case .cache(let setting):
|
||||
// case .permission(let setting):
|
||||
// case .feedback(let setting):
|
||||
// case .about(let setting):
|
||||
// case .contributors(let setting):
|
||||
// case .version(let setting):
|
||||
|
||||
self.itemSelected.onNext(setting)
|
||||
|
||||
default: break
|
||||
|
||||
}
|
||||
|
||||
}.disposed(by: rx.disposeBag)
|
||||
|
||||
|
||||
|
||||
return Output.init(items: items,
|
||||
selection: input.selection,
|
||||
itemSelected: itemSelected)
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,77 @@
|
||||
//
|
||||
// ThanksViewModel.swift
|
||||
// IndieMusic
|
||||
//
|
||||
// Created by WenLei on 2024/1/7.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import RxSwift
|
||||
import RxCocoa
|
||||
|
||||
class ThanksViewModel: ViewModel, ViewModelType {
|
||||
|
||||
struct Input {
|
||||
let viewWillAppear: ControlEvent<Bool>
|
||||
let selection: Driver<IndexPath>
|
||||
|
||||
}
|
||||
|
||||
struct Output {
|
||||
let items: BehaviorRelay<[SettingSection]>
|
||||
let selection: Driver<IndexPath>
|
||||
let itemSelected: PublishSubject<Setting>
|
||||
|
||||
}
|
||||
|
||||
let itemSelected = PublishSubject<Setting>()
|
||||
let items = BehaviorRelay<[SettingSection]>.init(value: [])
|
||||
|
||||
func transform(input: Input) -> Output {
|
||||
|
||||
input.viewWillAppear.subscribe { (_) in
|
||||
|
||||
}.disposed(by: rx.disposeBag)
|
||||
|
||||
let phone = Setting.init(title: "手机号", detail: "去绑定", arrowIcon: "setting_arrow")
|
||||
let wechatBinding = Setting.init(title: "绑定微信", detail: "", arrowIcon: "setting_arrow")
|
||||
let privacy = Setting.init(title: "注销账户", detail: "", arrowIcon: "setting_arrow")
|
||||
|
||||
|
||||
//TODO
|
||||
items.accept([SettingSection.init(items: [.setting(phone), .setting(wechatBinding), .setting(privacy)])])
|
||||
|
||||
|
||||
input.selection.drive { indexPath in
|
||||
guard let sectionItem = self.items.value.first?.items[indexPath.row] else { return }
|
||||
|
||||
|
||||
switch sectionItem {
|
||||
case .about(let setting):
|
||||
|
||||
// case .account(let setting):
|
||||
// case .privacy(let setting):
|
||||
// case .timing(let setting):
|
||||
// case .cache(let setting):
|
||||
// case .permission(let setting):
|
||||
// case .feedback(let setting):
|
||||
// case .about(let setting):
|
||||
// case .contributors(let setting):
|
||||
// case .version(let setting):
|
||||
|
||||
self.itemSelected.onNext(setting)
|
||||
|
||||
default: break
|
||||
|
||||
}
|
||||
|
||||
}.disposed(by: rx.disposeBag)
|
||||
|
||||
|
||||
|
||||
return Output.init(items: items,
|
||||
selection: input.selection,
|
||||
itemSelected: itemSelected)
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,77 @@
|
||||
//
|
||||
// TimingViewModel.swift
|
||||
// IndieMusic
|
||||
//
|
||||
// Created by WenLei on 2024/1/7.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import RxSwift
|
||||
import RxCocoa
|
||||
|
||||
class TimingViewModel: ViewModel, ViewModelType {
|
||||
|
||||
struct Input {
|
||||
let viewWillAppear: ControlEvent<Bool>
|
||||
let selection: Driver<IndexPath>
|
||||
|
||||
}
|
||||
|
||||
struct Output {
|
||||
let items: BehaviorRelay<[SettingSection]>
|
||||
let selection: Driver<IndexPath>
|
||||
let itemSelected: PublishSubject<Setting>
|
||||
|
||||
}
|
||||
|
||||
let itemSelected = PublishSubject<Setting>()
|
||||
let items = BehaviorRelay<[SettingSection]>.init(value: [])
|
||||
|
||||
func transform(input: Input) -> Output {
|
||||
|
||||
input.viewWillAppear.subscribe { (_) in
|
||||
|
||||
}.disposed(by: rx.disposeBag)
|
||||
|
||||
let phone = Setting.init(title: "手机号", detail: "去绑定", arrowIcon: "setting_arrow")
|
||||
let wechatBinding = Setting.init(title: "绑定微信", detail: "", arrowIcon: "setting_arrow")
|
||||
let privacy = Setting.init(title: "注销账户", detail: "", arrowIcon: "setting_arrow")
|
||||
|
||||
|
||||
//TODO
|
||||
items.accept([SettingSection.init(items: [.setting(phone), .setting(wechatBinding), .setting(privacy)])])
|
||||
|
||||
|
||||
input.selection.drive { indexPath in
|
||||
guard let sectionItem = self.items.value.first?.items[indexPath.row] else { return }
|
||||
|
||||
|
||||
switch sectionItem {
|
||||
case .about(let setting):
|
||||
|
||||
// case .account(let setting):
|
||||
// case .privacy(let setting):
|
||||
// case .timing(let setting):
|
||||
// case .cache(let setting):
|
||||
// case .permission(let setting):
|
||||
// case .feedback(let setting):
|
||||
// case .about(let setting):
|
||||
// case .contributors(let setting):
|
||||
// case .version(let setting):
|
||||
|
||||
self.itemSelected.onNext(setting)
|
||||
|
||||
default: break
|
||||
|
||||
}
|
||||
|
||||
}.disposed(by: rx.disposeBag)
|
||||
|
||||
|
||||
|
||||
return Output.init(items: items,
|
||||
selection: input.selection,
|
||||
itemSelected: itemSelected)
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "song_playAll_btn.svg",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 446 B |
@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "mine_message_btn.svg",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 497 B |
@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "mine_setting_btn.svg",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 639 B |
Loading…
Reference in new issue