我有一个包含动物名称、图像、位置X和位置Y的动物模型。我尝试在.position修饰符中使用位置X和位置Y变量来将动物图像拖放到位置X和位置Y。主要问题是.position修饰符不识别CGFloat值(位置X和位置Y)
我尝试通过 ForEach 循环调用我的位置 X 和位置 Y,即抛出我的所有动物模型,为我的模型(动物)创建一个变量来访问位置 X 和位置 Y 值。当我尝试打印animal.posx和animal.posy时,打印的值为0.0和0.0。 ` @Query var OwnAnimal : [Kid_animal]
ForEach(OwnAnimal, id: \.self) { animal in
if animal.Animal_drag == true
{
Image(animal.animal_image).resizable()
.scaledToFit()
.frame(width: 80, height: 80)
.position(x: animal.posx, y: animal.posy)
}
else {
Circle()
.fill(Color.white)
.opacity(0.4)
.frame(width: 100, height: 100)
.position(x : animal.posx, y: animal.posy)
.onDrop(of: ["public.image"], isTargeted: nil) { providers, location in
guard let provider = providers.first else {
return false
}
if provider.canLoadObject(ofClass: UIImage.self) {
_ = provider.loadObject(ofClass: UIImage.self) { image, error in
if let image = image as? UIImage {
let droppedImage = Image(uiImage: image)
droppedImages[animal.animal_image] = droppedImage
}else{
withAnimation(Animation.easeInOut(duration: 0.2)) {
droppedImages[animal.animal_image] = nil
}
}
}
}
animal.Animal_drag = true
return true
}
.overlay(
droppedImages[animal.animal_image].map {
$0.resizable()
.scaledToFit()
.frame(width: 80, height: 80)
.position(x: animal.posx, y: animal.posy)
}
)
}
}` this my swift view
import SwiftData
import CoreGraphics
@Model
class Kid_animal {
var animal_name : String = ""
var animal_image : String = ""
var level : String = ""
var animal_energy : String = ""
var posx : CGFloat
var posy : CGFloat
var Animal_drag : Bool
init(animal_name: String, animal_image: String, level: String, animal_energy: String, posx: CGFloat , posy: CGFloat,Animal_drag : Bool) {
self.animal_name = animal_name
self.animal_image = animal_image
self.level = level
self.animal_energy = animal_energy
self.posx = posx
self.posy = posy
self.Animal_drag = Animal_drag
}
}
这是我的模型
遵循命名约定,对于非可选属性,您需要默认值 0.0,对于 SwiftUI,您需要将类设置为 ObservedObject 并 @Published 所有要观察的属性。
尝试以上方法!