룰렛 뷰 추가

This commit is contained in:
Yu Sung
2023-12-07 08:43:18 +09:00
parent 0af16ac000
commit d52f0d1176
8 changed files with 329 additions and 11 deletions

View File

@@ -390,7 +390,6 @@ struct LiveRoomView: View {
}
}
.frame(width: screenSize().width)
.animation(nil)
}
HStack(spacing: 0) {
@@ -704,7 +703,9 @@ struct LiveRoomView: View {
}
if viewModel.isShowRoulette {
RouletteViewDialog(isShowing: $viewModel.isShowRoulette, options: viewModel.rouletteItems, selectedOption: viewModel.rouletteSelectedItem) {
viewModel.sendRouletteDonation()
}
}
if viewModel.isLoading && viewModel.liveRoomInfo == nil {
@@ -713,9 +714,6 @@ struct LiveRoomView: View {
}
.ignoresSafeArea(.keyboard)
.edgesIgnoringSafeArea(keyboardHandler.keyboardHeight > 0 ? .bottom : .init())
.transaction { transaction in
transaction.animation = nil
}
.sheet(
isPresented: $viewModel.isShowShareView,
onDismiss: { viewModel.shareMessage = "" },

View File

@@ -141,7 +141,7 @@ final class LiveRoomViewModel: NSObject, ObservableObject {
@Published var roulettePreview: RoulettePreview? = nil
@Published var isShowRoulette = false
@Published var rouletteItems = [RouletteItem]()
@Published var rouletteItems = [String]()
@Published var rouletteSelectedItem = ""
var rouletteCan = 0
@@ -1432,10 +1432,9 @@ final class LiveRoomViewModel: NSObject, ObservableObject {
}
func sendRouletteDonation() {
let rawMessage = rouletteSelectedItem
let rouletteRawMessage = LiveRoomChatRawMessage(
type: .ROULETTE_DONATION,
message: rawMessage,
message: rouletteSelectedItem,
can: rouletteCan,
donationMessage: ""
)
@@ -1449,7 +1448,7 @@ final class LiveRoomViewModel: NSObject, ObservableObject {
LiveRoomRouletteDonationChat(
profileUrl: profileUrl,
nickname: nickname,
rouletteResult: rawMessage
rouletteResult: rouletteSelectedItem
)
)
@@ -1495,10 +1494,10 @@ final class LiveRoomViewModel: NSObject, ObservableObject {
isLoading = false
self.rouletteItems.removeAll()
self.rouletteItems.append(contentsOf: items)
self.rouletteItems.append(contentsOf: items.map { $0.title })
self.rouletteSelectedItem = rouletteItems[Int(arc4random_uniform(UInt32(rouletteItems.count)))]
self.rouletteCan = can
sendRouletteDonation()
self.isShowRoulette = true
}
private func refundRouletteDonation() {

View File

@@ -0,0 +1,37 @@
//
// RouletteViewDialog.swift
// SodaLive
//
// Created by klaus on 2023/12/07.
//
import SwiftUI
struct RouletteViewDialog: View {
@Binding var isShowing: Bool
let options: [String]
let selectedOption: String
let complete: () -> Void
var body: some View {
let model = FortuneWheelModel(
titles: options,
size: 320,
onSpinEnd: onSpinEnd,
getWheelItemIndex: getWheelItemIndex
)
ZStack {
FortuneWheel(model: model)
}
}
private func onSpinEnd(index: Int) {
complete()
isShowing = false
}
private func getWheelItemIndex() -> Int {
return options.firstIndex(of: selectedOption) ?? 0
}
}