首页 > 解决方案 > SwiftUI - 按钮动作在图像上绘制

问题描述

爱好者 ios 编码器在这里...

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

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

我曾经这样做的老方法

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

我空的 SwiftUI 按钮代码

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

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

感谢任何可以对此有所了解的人。

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

标签: iosimagebuttonswiftuiaction

解决方案


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

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

您可能正在寻找@StateSwiftUI。更改@State变量将强制您的视图重绘自身。(除此之外还有更多@State变量)

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

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")
            })
        }
    }
}

推荐阅读