swift - 如何使用滑动手势在 swift UI 中创建退格功能(与原始 IOS 计算器相同)
问题描述
我正在尝试删除单个数字,在数字上滑动(向左或向右,哪个方向都没有关系。)每次滑动都会删除另一个数字,直到我们达到零。
您可以在下面找到我正在努力实现的附加图片。任何人都可以向我建议如何实现它?
关于如何在 swift UI 中实现这一点的任何想法?
您可能会在下面找到我的代码,该代码负责显示的字符串。
import SwiftUI
struct CalculationState {
var currentNumber: Double = 0
let characterLimit = 7
var storedNumber: Double?
var storedAction: ActionView.Action?
mutating func appendNumber(_ number: Double) {
if number.truncatingRemainder(dividingBy: 1) == 0 && currentNumber.truncatingRemainder(dividingBy: 1) == 0 {
currentNumber = 10 * currentNumber + number
} else {
currentNumber = number
}
}
}
struct Home: View {
//MARK: - Properties
@StateObject var viewModel = FetchData()
@State var state = CalculationState()
let characterLimit = 9
let firstBreakDownDivider = 3
//MARK: - Computed propety
var displayedString: String {
return String(String(format: "%.f", arguments: [state.currentNumber]).prefix(characterLimit))
}
//MARK: - Body
var body: some View {
//View of Number Pad
VStack(alignment: .trailing, spacing: 20) {
// Spacer()
Text(displayedString)
.font(.system(size: 75))
.foregroundColor(.white)
.lineLimit(1)
.padding(.bottom)
.gesture(DragGesture(minimumDistance: 0, coordinateSpace: .local)
.onEnded({ value in
if value.translation.width < 0 {
// left
state.currentNumber = Double(displayedString.dropLast()) ?? 0
print("Swiped Left")
}
if value.translation.width > 0 {
// left
state.currentNumber = Double(displayedString.dropLast()) ?? 0
print("Swiped right")
}
}))
解决方案
DragGesture
您可以尝试在显示您的号码的视图上收听。
要从数字中删除数字,一种简单的方法是将数字转换为字符串,然后调用dropLast()
字符串。之后,将字符串转换回数字并更新您的视图。
推荐阅读
- javascript - “Ctrl+A”和“del”按钮不适用于 ssn 验证输入字段
- blockchain - 关于 UsingLiquidityProtectionService 的 Solidity 问题
- jquery - 使用多个选择器时,Uncaught SyntaxError: Invalid or unexpected token
- javascript - 如何将多个图表JS提取到多个页面中的pdf文件
- c# - 由于请求错误,无法安装 nuget 包
- python-3.x - 使用多输入输出 Tensorflow 模型子类验证/测试更差的指标
- java - Junit 测试:Repository 的 findById 方法
- node.js - Nodemailer 联系表单在本地工作,但在部署时出错
- machine-learning - 通过机器学习实现单输出的多输入
- wordpress - 如何在手机屏幕上保持内联显示