feat: 하단 탭 아이콘 변경
21
SodaLive/Resources/Assets.xcassets/ic_chat.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "ic_chat.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
SodaLive/Resources/Assets.xcassets/ic_chat.imageset/ic_chat.png
vendored
Normal file
|
After Width: | Height: | Size: 401 B |
21
SodaLive/Resources/Assets.xcassets/ic_chat_selected.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "ic_chat_selected.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
SodaLive/Resources/Assets.xcassets/ic_chat_selected.imageset/ic_chat_selected.png
vendored
Normal file
|
After Width: | Height: | Size: 519 B |
21
SodaLive/Resources/Assets.xcassets/ic_home.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "ic_home.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
SodaLive/Resources/Assets.xcassets/ic_home.imageset/ic_home.png
vendored
Normal file
|
After Width: | Height: | Size: 394 B |
21
SodaLive/Resources/Assets.xcassets/ic_home_selected.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "ic_home_selected.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
SodaLive/Resources/Assets.xcassets/ic_home_selected.imageset/ic_home_selected.png
vendored
Normal file
|
After Width: | Height: | Size: 431 B |
21
SodaLive/Resources/Assets.xcassets/ic_live.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "ic_live.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
SodaLive/Resources/Assets.xcassets/ic_live.imageset/ic_live.png
vendored
Normal file
|
After Width: | Height: | Size: 426 B |
21
SodaLive/Resources/Assets.xcassets/ic_live_selected.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "ic_live_selected.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
SodaLive/Resources/Assets.xcassets/ic_live_selected.imageset/ic_live_selected.png
vendored
Normal file
|
After Width: | Height: | Size: 764 B |
21
SodaLive/Resources/Assets.xcassets/ic_my.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "ic_my.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
SodaLive/Resources/Assets.xcassets/ic_my.imageset/ic_my.png
vendored
Normal file
|
After Width: | Height: | Size: 320 B |
21
SodaLive/Resources/Assets.xcassets/ic_my_selected.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "ic_my_selected.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
SodaLive/Resources/Assets.xcassets/ic_my_selected.imageset/ic_my_selected.png
vendored
Normal file
|
After Width: | Height: | Size: 431 B |
21
SodaLive/Resources/Assets.xcassets/ic_subscribe.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "ic_subscribe.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
SodaLive/Resources/Assets.xcassets/ic_subscribe.imageset/ic_subscribe.png
vendored
Normal file
|
After Width: | Height: | Size: 439 B |
21
SodaLive/Resources/Assets.xcassets/ic_subscribe_selected.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "ic_subscribe_selected.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
SodaLive/Resources/Assets.xcassets/ic_subscribe_selected.imageset/ic_subscribe_selected.png
vendored
Normal file
|
After Width: | Height: | Size: 631 B |
21
SodaLive/Resources/Assets.xcassets/img_text_logo.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "img_text_logo.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
BIN
SodaLive/Resources/Assets.xcassets/img_text_logo.imageset/img_text_logo.png
vendored
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
@@ -285,16 +285,10 @@ extension AppDelegate : UNUserNotificationCenterDelegate {
|
||||
AppState.shared.pushMessageId = messageId
|
||||
}
|
||||
|
||||
if let auditionIdString = auditionIdString, let auditionId = Int(auditionIdString), auditionId > 0 {
|
||||
AppState.shared.startTab = .audition
|
||||
NotificationCenter.default.post(name: .didReceiveHomeTab, object: HomeViewModel.CurrentTab.audition)
|
||||
}
|
||||
|
||||
completionHandler()
|
||||
}
|
||||
}
|
||||
|
||||
extension Notification.Name {
|
||||
static let pointGranted = Notification.Name("POINT_GRANTED")
|
||||
static let didReceiveHomeTab = Notification.Name("didReceiveHomeTab")
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@ class AppState: ObservableObject {
|
||||
@Published var purchasedContentOrderType = OrderType.KEEP
|
||||
|
||||
@Published var isChangeAdultContentVisible = false
|
||||
@Published var startTab: HomeViewModel.CurrentTab = .content
|
||||
@Published var startTab: HomeViewModel.CurrentTab = .home
|
||||
|
||||
@Published var marketingUtmSource = ""
|
||||
@Published var marketingUtmMedium = ""
|
||||
|
||||
@@ -13,27 +13,27 @@ struct BottomTabView: View {
|
||||
|
||||
var body: some View {
|
||||
HStack(spacing: 0) {
|
||||
let tabWidth = width / 4
|
||||
let tabWidth = width / 3
|
||||
|
||||
TabButton(
|
||||
title: "콘텐츠",
|
||||
title: "홈",
|
||||
action: {
|
||||
if currentTab != .content {
|
||||
currentTab = .content
|
||||
if currentTab != .home {
|
||||
currentTab = .home
|
||||
}
|
||||
},
|
||||
image: {
|
||||
currentTab == .content ?
|
||||
"ic_tabbar_content_selected" :
|
||||
"ic_tabbar_content_normal"
|
||||
currentTab == .home ?
|
||||
"ic_home_selected" :
|
||||
"ic_home"
|
||||
},
|
||||
fontName: {
|
||||
currentTab == .content ?
|
||||
currentTab == .home ?
|
||||
Font.bold.rawValue :
|
||||
Font.medium.rawValue
|
||||
},
|
||||
color: {
|
||||
currentTab == .content ?
|
||||
currentTab == .home ?
|
||||
Color.button :
|
||||
Color.graybb
|
||||
},
|
||||
@@ -49,8 +49,8 @@ struct BottomTabView: View {
|
||||
},
|
||||
image: {
|
||||
currentTab == .live ?
|
||||
"ic_tabbar_live_selected" :
|
||||
"ic_tabbar_live_normal"
|
||||
"ic_live_selected" :
|
||||
"ic_live"
|
||||
},
|
||||
fontName: {
|
||||
currentTab == .live ?
|
||||
@@ -65,31 +65,6 @@ struct BottomTabView: View {
|
||||
width: tabWidth
|
||||
)
|
||||
|
||||
TabButton(
|
||||
title: "오디션",
|
||||
action: {
|
||||
if currentTab != .audition {
|
||||
currentTab = .audition
|
||||
}
|
||||
},
|
||||
image: {
|
||||
currentTab == .audition ?
|
||||
"ic_tabbar_audition_selected" :
|
||||
"ic_tabbar_audition_normal"
|
||||
},
|
||||
fontName: {
|
||||
currentTab == .audition ?
|
||||
Font.bold.rawValue :
|
||||
Font.medium.rawValue
|
||||
},
|
||||
color: {
|
||||
currentTab == .audition ?
|
||||
Color.button :
|
||||
Color.graybb
|
||||
},
|
||||
width: tabWidth
|
||||
)
|
||||
|
||||
TabButton(
|
||||
title: "마이",
|
||||
action: {
|
||||
@@ -99,8 +74,8 @@ struct BottomTabView: View {
|
||||
},
|
||||
image: {
|
||||
currentTab == .mypage ?
|
||||
"ic_tabbar_my_selected" :
|
||||
"ic_tabbar_my_normal"
|
||||
"ic_my_selected" :
|
||||
"ic_my"
|
||||
},
|
||||
fontName: {
|
||||
currentTab == .mypage ?
|
||||
|
||||
@@ -18,7 +18,6 @@ struct HomeView: View {
|
||||
@StateObject var contentPlayerPlayManager = ContentPlayerPlayManager.shared
|
||||
|
||||
private let liveView = LiveView()
|
||||
private let audition = AuditionView()
|
||||
private let contentView = ContentMainTabHomeView()
|
||||
|
||||
@State private var isShowPlayer = false
|
||||
@@ -30,17 +29,13 @@ struct HomeView: View {
|
||||
VStack(spacing: 0) {
|
||||
ZStack {
|
||||
contentView
|
||||
.frame(width: viewModel.currentTab == .content ? proxy.size.width : 0)
|
||||
.opacity(viewModel.currentTab == .content ? 1.0 : 0.01)
|
||||
.frame(width: viewModel.currentTab == .home ? proxy.size.width : 0)
|
||||
.opacity(viewModel.currentTab == .home ? 1.0 : 0.01)
|
||||
|
||||
liveView
|
||||
.frame(width: viewModel.currentTab == .live ? proxy.size.width : 0)
|
||||
.opacity(viewModel.currentTab == .live ? 1.0 : 0.01)
|
||||
|
||||
audition
|
||||
.frame(width: viewModel.currentTab == .audition ? proxy.size.width : 0)
|
||||
.opacity(viewModel.currentTab == .audition ? 1.0 : 0.01)
|
||||
|
||||
if viewModel.currentTab == .mypage {
|
||||
MyPageView()
|
||||
}
|
||||
|
||||
@@ -18,24 +18,11 @@ final class HomeViewModel: ObservableObject {
|
||||
private let playbackTrackingRepository = PlaybackTrackingRepository()
|
||||
|
||||
enum CurrentTab: String {
|
||||
case content, live, audition, mypage
|
||||
case home, live, mypage
|
||||
}
|
||||
|
||||
@Published var currentTab: CurrentTab = AppState.shared.startTab
|
||||
|
||||
init() {
|
||||
NotificationCenter.default
|
||||
.publisher(for: .didReceiveHomeTab)
|
||||
.compactMap {
|
||||
$0.object as? CurrentTab
|
||||
}
|
||||
.sink { [weak self] currentTab in
|
||||
AppState.shared.setAppStep(step: .main)
|
||||
self?.currentTab = currentTab
|
||||
}
|
||||
.store(in: &subscription)
|
||||
}
|
||||
|
||||
func pushTokenUpdate(pushToken: String) {
|
||||
userRepository.updatePushToken(pushToken: pushToken)
|
||||
.sink { result in
|
||||
|
||||