SwiftUI - 按钮动作绘制在图像上

SwiftUI - Button action draws on an image

业余爱好者ios编码器...

我有一个旧的 Objective C 项目,我想在 swiftui 中重新创建。

当我单击一个按钮时,它会绘制一个 CGRect 并填充我写出的 IBAction 中的图像源的边界,然后我可以在屏幕周围拖动。

Old way I used to do it

我如何在 SwiftUI 中执行此操作?

My empty SwiftUI Button Code

我目前在 VStack 中绘制了一个图像,我可以移动它并调整其大小,但我希望它不存在于应用程序加载时,而是根据用户请求绘制它和其他图像。 IE 按钮按下。

我不知道我应该搜索什么来找到这个答案,因为搜索按钮和图像会立即为我提供有关如何将图像添加到按钮的教程,而不是在按钮上绘制新的可交互元素的教程视图。

感谢任何能对此提供更多说明的人。

编辑 - 第二次按下按钮时,我需要再次生成图像,这样会有多个实例。

我不是 100% 确定我是否理解正确,但这只是单击按钮时显示图像的问题?

您已经说过您得到了具有所需行为的图像,但您不希望它从一开始就存在。我认为您正在为 addSubview 在 SwiftUI 中寻找替代方案,但没有直接的替代方案。

您可能正在寻找的是 SwiftUI 中的 @State。更改 @State 变量将强制您的视图重绘自身。 (还有更多 @State 个变量)

您可以根据条件绘制图像。在您的按钮上单击您可以更改您的条件所基于的状态变量以重绘您的视图并显示您的图像。我在我的示例中使用了 toggle() 函数,因此再次单击按钮将导致删除图像。

import SwiftUI

struct ContentView: View {
    @State private var showImage = false
    
    var body: some View {
        VStack {
            if showImage {
                Image(systemName: "gear") // Your working image
            }
            Button(action: {
                self.showImage.toggle()
            }, label: {
                Text("draw image")
            })
        }
    }
}

这里是一个例子,当你一次又一次点击按钮时,你可以添加越来越多的图片。我将 @State 变量的类型更改为数组,然后通过 ForEach.

遍历该数组
import SwiftUI

struct ContentView: View {
    @State private var images: [UUID] = []
    
    var body: some View {
        VStack {
            ForEach(images, id: \.self) { _ in
                Image(systemName: "gear") // Your working image
            }
            Button(action: {
                self.images.append(UUID())
            }, label: {
                Text("draw image")
            })
        }
    }
}