View 嵌入应用程序时视图未正确渲染
我有一个视图结构,可以在预览中呈现ok,但嵌入到应用程序中时不会。该视图用于显示图像文件,当骰子更改值时工作正常。现在它已更改为动态绘图,它已停止正常工作。它保持显示与第一个值相同数量的点,并在重画时将点放错位置 以下是视图的代码:View 嵌入应用程序时视图未正确渲染,view,swiftui,View,Swiftui,我有一个视图结构,可以在预览中呈现ok,但嵌入到应用程序中时不会。该视图用于显示图像文件,当骰子更改值时工作正常。现在它已更改为动态绘图,它已停止正常工作。它保持显示与第一个值相同数量的点,并在重画时将点放错位置 以下是视图的代码: import SwiftUI struct DiceView: View { var dice: NubbleGame.Dice var color: Color = Color.red let dotSizeDivisor = 5 var body: so
import SwiftUI
struct DiceView: View {
var dice: NubbleGame.Dice
var color: Color = Color.red
let dotSizeDivisor = 5
var body: some View {
GeometryReader
{ viewSize in
let smallestSide = min(viewSize.size.width, viewSize.size.height)
let dotSize = smallestSide/CGFloat(dotSizeDivisor)
ZStack()
{
RoundedRectangle(cornerRadius: smallestSide/10)
.stroke(Color.black, lineWidth: viewSize.size.width/50)
ForEach(0..<dice.currentValue)
{ i in
ZStack()
{
Circle()
.fill(color)
.position(getPositionForDot(dotNumber: i+1, diceValue: dice.currentValue, diceSize:smallestSide))
.frame(width: dotSize, height: dotSize, alignment: .center)
Circle()
.stroke(Color.black, lineWidth: 2)
.position(getPositionForDot(dotNumber: i+1, diceValue: dice.currentValue, diceSize:smallestSide))
.frame(width: dotSize, height: dotSize, alignment: .center)
}
}
}
}
}
func getPositionForDot(dotNumber: Int, diceValue: Int, diceSize: CGFloat) -> CGPoint
{
var tempDiceValue = diceValue
var tempDotNumber = dotNumber
let zero = CGFloat(diceSize/CGFloat(dotSizeDivisor))
let offSet = CGFloat((diceSize * 0.9) / 2)
let center = CGFloat(diceSize/2)
var thisDot: CGPoint = CGPoint(x: 0, y: 0)
if diceValue%2 != 0
{
if dotNumber == 1
{
return CGPoint(x: (diceSize/2) - offSet, y: (diceSize/2) - offSet)
}
else
{
tempDiceValue = diceValue - 1
tempDotNumber = dotNumber - 1
}
}
for i in 1..<tempDotNumber+1
{
if tempDiceValue % 2 == 0
{
if i == 1
{
thisDot = CGPoint(x: zero - offSet, y: zero - offSet)
}
else if i == 2
{
thisDot = CGPoint(x: diceSize - zero - offSet, y: (diceSize - zero) - offSet)
}
else if i == 3
{
thisDot = CGPoint(x: (diceSize - zero) - offSet, y: zero - offSet)
}
else if i == 4
{
thisDot = CGPoint(x: zero - offSet, y: (diceSize - zero) - offSet)
}
else if i == 5
{
thisDot = CGPoint(x: zero - offSet, y: diceSize/2 - offSet)
}
else if i == 6
{
thisDot = CGPoint(x: (diceSize - zero) - offSet, y: center - offSet)
}
else if i == 7
{
thisDot = CGPoint(x: center - offSet, y: center-diceSize/(CGFloat(dotSizeDivisor)) - offSet)
}
else if i == 8
{
thisDot = CGPoint(x: center - offSet, y: center+diceSize/(CGFloat(dotSizeDivisor)) - offSet)
}
}
}
return thisDot
}
}
…这是模型中的骰子结构:
struct Dice: Identifiable
{
var id: Int
var numberOfSides: Int
var currentValue: Int
}
任何帮助都将不胜感激!谢谢大家! 问题出在画点的前循环中。。。这个答案有解决办法。它必须是可识别的
struct Dice: Identifiable
{
var id: Int
var numberOfSides: Int
var currentValue: Int
}