ios - SwiftUI - 按钮动作在图像上绘制
问题描述
爱好者 ios 编码器在这里...
我有一个旧的 Objective C 项目,我试图在 swiftui 中重新创建。
当我单击一个按钮时,它会绘制一个 CGRect 并从我写的 IBAction 中填充图像源的范围,然后我可以在屏幕上拖动。
我如何在 SwiftUI 中执行此操作?
我目前在 VStack 中绘制了一个图像,我可以移动它并调整其大小,但我希望它在应用程序加载时不存在,而是让它和其他人根据用户请求绘制。IE按钮按下。
我不知道我应该搜索什么来找到这个答案,因为搜索按钮和图像会立即为我提供有关如何将图像添加到按钮的教程,而不是在视图上绘制新的可交互元素的按钮。
感谢任何可以对此有所了解的人。
编辑 - 第二次按下按钮时,我需要再次生成图像,因此会有多个实例。
解决方案
我不是 100% 确定我是否理解正确,但这只是在单击按钮时显示图像的问题?
您已经说过您获得了具有所需行为的图像,但您不希望它从一开始就存在。我认为您正在为 SwiftUI 寻找替代方案addSubview
,但没有直接的替代方案。
您可能正在寻找@State
SwiftUI。更改@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")
})
}
}
}
推荐阅读
- python - 为 csv.reader 预处理一行
- linux - 如何通过 pip 安装 vowpalwabbit
- haskell - 数据构造函数中的奇怪类型语法
- c# - Spire Xls 设置单元格范围十六进制格式
- unity3d - 如何修复 Unity 教程“识别本地播放器”OnStartLocalPlayer() 中的错误?
- c# - 在自定义按钮中模仿 TextImageRelation 的行为
- angular - Angular 6 - 隐藏或显示从服务触发的组件中的 Div
- single-sign-on - Alfresco 无法使用 CAS SSO 连接到存储库
- sql - 正则表达式过滤带点和不带点的数字
- python - Flask-SQLAlchemy ORM/GeoAlchemy2 结果到字典,最终是 JSON