룰렛 뷰 추가
This commit is contained in:
@@ -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 = "" },
|
||||
|
@@ -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() {
|
||||
|
@@ -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
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user