You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在iOS的Rubyist中实现触摸屏幕替代Enter键功能

解决Rubyist中无法用Enter键触发飞镖随机目标的问题

原来的代码依赖STDIN.gets读取回车来生成下一个目标,但iOS的Rubyist环境没有标准输入的回车交互,下面提供两种替代方案,用UI交互(按钮或触摸屏幕)来触发目标生成:

方案一:添加按钮触发

这种方式更直观,用户点击按钮获取下一个目标:

#! ruby
require 'rubygems'
require 'ui'

BOARD = ['single','double','triple'] 
RANGE = 20

# 创建主窗口
window = UIWindow.new.tap do |w|
  w.frame = UIScreen.mainScreen.bounds
  w.backgroundColor = UIColor.whiteColor
  w.makeKeyAndVisible
end

# 创建显示目标的标签
target_label = UILabel.new.tap do |label|
  label.frame = CGRect.new(20, 100, window.frame.size.width - 40, 60)
  label.textAlignment = UITextAlignmentCenter
  label.font = UIFont.systemFontOfSize(20)
  label.text = "Welcome to Dart Target Hunter...\nTap the button to get your first target!"
  label.numberOfLines = 0
end
window.addSubview(target_label)

# 创建触发按钮
next_button = UIButton.buttonWithType(UIButtonTypeSystem).tap do |btn|
  btn.frame = CGRect.new(50, 200, window.frame.size.width - 100, 60)
  btn.setTitle("Next Target", forState: UIControlStateNormal)
  btn.titleLabel.font = UIFont.systemFontOfSize(20)
  # 绑定按钮点击事件
  btn.addTarget(self, action: 'generate_target:', forControlEvents: UIControlEventTouchUpInside)
end
window.addSubview(next_button)

# 生成随机目标的方法
def generate_target(sender)
  target = rand(RANGE + 1) 
  multiplier = (target == 0) ? rand(BOARD.size - 1) : rand(BOARD.size)  
  target_text = "Try to hit --> #{BOARD[multiplier]} #{(target == 0) ? "bullseye" : target}"
  target_label.text = target_text
end

方案二:触摸屏幕任意位置触发

如果觉得按钮麻烦,可以设置触摸屏幕任意区域都能生成新目标:

#! ruby
require 'rubygems'
require 'ui'

BOARD = ['single','double','triple'] 
RANGE = 20

# 创建主窗口
window = UIWindow.new.tap do |w|
  w.frame = UIScreen.mainScreen.bounds
  w.backgroundColor = UIColor.whiteColor
  w.makeKeyAndVisible
end

# 创建显示目标的标签
target_label = UILabel.new.tap do |label|
  label.frame = CGRect.new(20, 150, window.frame.size.width - 40, 80)
  label.textAlignment = UITextAlignmentCenter
  label.font = UIFont.systemFontOfSize(22)
  label.text = "Welcome to Dart Target Hunter...\nTap anywhere to get your target!"
  label.numberOfLines = 0
end
window.addSubview(target_label)

# 添加屏幕触摸监听
window.addGestureRecognizer(UITapGestureRecognizer.new.tap do |tap|
  tap.addTarget(self, action: 'on_screen_tap:')
end)

# 触摸触发的目标生成方法
def on_screen_tap(gesture)
  target = rand(RANGE + 1) 
  multiplier = (target == 0) ? rand(BOARD.size - 1) : rand(BOARD.size)  
  target_text = "Try to hit --> #{BOARD[multiplier]} #{(target == 0) ? "bullseye" : target}"
  target_label.text = target_text
end

说明

  • 两种方案都依赖Rubyist内置的ui库,用来创建iOS原生UI组件
  • 核心逻辑和你原来的代码一致,只是把STDIN.gets的触发方式换成了UI交互
  • 运行代码后,屏幕上会显示提示信息,按交互方式操作就能生成随机飞镖目标

内容的提问来源于stack exchange,提问作者Garchy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 06:25:28