Here is what I did for the Stars View
@State var rating: Double = 3.0
@State var starSize = 26.0
CosmosRatingView(rating: $rating, starSize: $starSize) { result in
rating = result
}
Text("\(String(format: "%0.02f", rating)) \(rating <= 1 ? "Star" : "Stars")")
---------------------------------------------------------------------------------------------------------------------
import SwiftUI
import Cosmos
// A SwiftUI wrapper for Cosmos view
struct CosmosRatingView: UIViewRepresentable {
@Binding var rating: Double
@Binding var starSize: Double
let cosmosView = CosmosView()
var didFinishRating: ((Double) -> Void)?
func makeUIView(context: Context) -> CosmosView {
CosmosView()
}
func updateUIView(_ uiView: CosmosView, context: Context) {
uiView.rating = rating
uiView.settings.fillMode = .half
uiView.didFinishTouchingCosmos = { value in
didFinishRating?(value)
}
uiView.didTouchCosmos = { value in
didFinishRating?(value)
}
// Autoresize Cosmos view according to it intrinsic size
uiView.setContentHuggingPriority(.defaultHigh, for: .vertical)
uiView.setContentHuggingPriority(.defaultHigh, for: .horizontal)
// Change Cosmos view settings here
uiView.settings.starSize = starSize
}
}
struct ContentView: View {
@State var rating = 3.0
@State var starSize = 30.0
var body: some View {
CosmosRatingView(rating: $rating, starSize: $starSize)
}
}
struct ReviewView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}