如何在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
相关产品推荐
相关产品推荐

