MacRuby 0.3发布,支持Interface Builder,和创建GUI用的HotCocoa
作者 Werner
Schuster ,译者 贾晓楠 发布于
2008年9月24日 |
一个较大的变化是方法调度器,它现在完全基于Objective-C运行时。MacRuby现在使用 Objective-C运行时来实现Ruby的类语义,并调度纯Ruby方法。这是个非常重要的变化,因为这不仅简化了大量的内核实现,还让两个世界之间的界限更加清晰。
[..]
在纯Ruby的方面,修复了很多bug,我们现在可以运行一些RubyGems命令,还可以安装简单的gem。但不要指望MacRuby能运行Rails!
MacRuby现在支持用Cocoa来创建GUI—— 实际上创建GUI有两种方法。一种是使用和Apple's XCode相配套的Interface Builder(IB)。用IB创建的GUI可以通过action和outlet(GUI元件收发消息用的)来连接到Ruby类。MacRuby提供了一
个用Ruby写的工具来创建必要的元数据,用来映射到Ruby代码构造器,例如从accessor和method映射到action和outlet。
rb_nibtool是用Ruby写的,还使用了 Ruby 1.9的Ripper库。Ripper使用Ruby源,让它能被Ruby代码访问——要么作为Lexer标记流,要么作为s表达式(相当于ParseTree,不过Ruby
1.9里还没有)。rb_nibtool根据Ruby源文件为.nib文件提供类名;attr_accessor
、attr_writer
和其它一些调用被解释为outlet,一个标识符跟一个ib_action定义为一个action。最终,这些收集到的信息汇入一个.nib 文件,把GUI定义和Ruby代码连接起来。
顺便提一句:使用MacRuby和Interface Builder创建GUI是在OS X上的Ruby的一个选择——而在Windows上,Ruby
In Steel IDE能帮助Visual Studio创建GUI,要通过Ruby Connector使用IronRuby或MRI。
另一种创建GUI的方法是HotCocoa,它随MacRuby一起提供,可以使用创建器的理念来创建GUI,类似于一些其它的Ruby工具,比如Ruby
Shoes,以及其它Ruby GUI库。大致了解一下HotCocoa的实现,看看创建方法名是如何映射到Cocoa
GUI控件上的。到现在为止,关于HotCocoa的文档几乎没有,因此唯一能参考的就是随MacRuby一起提供的HotCocoa源码和例程。
和其它Ruby工具包一样,HotCocoa附带了一个用来建立程序框架的工具:
hotcocoa classlist
该命令用来创建一个新程序,连同必须的库和设置。
HotCocoa程序是什么样子的呢?这里有一个简短的示例,用来列出所有加载的类及其父类的表格。这段代码建立了一个GUI——请把代码复制到HotCocoa创建的程序框架中的lib/application.rb
文件中:
def start
application :name => "Classlist" do |app|
app.delegate = self
window :frame => [100, 100, 500, 500], :title => "Classlist" do |win|
# Add a button to - clicking shows the data in the table
win << button(:title => "Show classes", :bezel => :regular_square).on_action {
klasses = []
ObjectSpace::each_object(Class){|x|
klasses << {:klass => x.to_s, :ancestors => x.ancestors.join(',')}
}
@table.data = klasses
}
# create the table
@table = table_view(
:columns => [
column(:id => :klass, :text => "Class"),
column(:id => :ancestors, :text => "Ancestors")
] )
# put the table inside a scroll view
win << scroll_view(:layout => {:expand => [:width, :height]}) do |scroll|
scroll << @table
end
win.will_close { exit }
end
end
end
Rake文件负责程序运行的所有细节——要运行它,执行:
macrake
要了解关于MacRuby的更多信息,请关注InfoQ对Laurent
Sansonetti的访谈。
查看原文:MacRuby
0.3 Release Brings Interface Builder Support, HotCocoa for GUI Building
MacRuby 0.3发布,支持Interface Builder,和创建GUI用的HotCocoa的更多相关文章
- [转]使用 Xcode 5 和 Interface Builder创建 Hello World App
转载地址:http://www.ithome.me/archives/581.html 使用 Xcode 5 和 Interface Builder创建 Hello World App 发表回复 当x ...
- iOS杂谈-我为什么不用Interface builder
在互联网上关于Interface Builder的争吵每天都在发生,用和不用大家都有一大堆的理由.最近看了这篇文章,很多地方和作者有共鸣,结合自己的一些经历,就有了你现在所看到的东西,你可以把它当成前 ...
- Kube-OVN1.5.0新版本发布,支持鲲鹏云平台网络平面部署
近日,Kube-OVN发布了最新的1.5.0版本.自2019年4月开源以来,Kube-OVN经历了15次重要版本迭代,以及社区成立,建设者贡献代码,稳定性测试,国内外用户开始在生产环境中投入使用,企业 ...
- Spring.Net.FrameworkV3.0 版本发布了,感谢大家的支持
Spring.Net.FrameworkV3.0 版本发布了,感谢大家的支持. Spring.Net.Framework,基于.NET的快速信息化系统开发.整合框架,为企业或个人在.NET环境下快速开 ...
- [转帖]银河麒麟Kydroid 2.0全新发布:原生支持海量安卓APP
银河麒麟Kydroid 2.0全新发布:原生支持海量安卓APP https://news.cnblogs.com/n/652299/将手机操作系统 转移到 桌面 跟chromebook 类似的策略吧 ...
- 支持边云协同终身学习特性,KubeEdge子项目Sedna 0.3.0版本发布!
摘要:随着边缘设备数量指数级增长以及设备性能的提升,边云协同机器学习应运而生,以期打通机器学习的最后一公里. 本文分享自华为云社区<支持边云协同终身学习特性,KubeEdge子项目Sedna 0 ...
- iOS开发-Interface Builder的前世今生
Interface Builder,是用于苹果公司Mac OS X操作系统的软件开发程序,Xcode套件的一部分,于1988年创立.它的创造者Jean-Marie Hullot自称是“一个热爱旅行.充 ...
- CoreWCF 1.0 正式发布,支持 .NET Core 和 .NET 5+ 的 WCF
CoreWCF 1.0 正式发布,支持 .NET Core 和 .NET 5+ 的 WCF https://devblogs.microsoft.com/dotnet/corewcf-v1-relea ...
- 苹果开发工具:Xcode和Interface Builder
摘要:在Mac OS X上开发,首选Xcode继承开发环境.本文对开发工具套件中最重要的Xcode和Interface Builder两个工具做了简要介绍,并提供<苹果开发工具概述>PDF ...
随机推荐
- Servlet之HTTP状态码
HTTP 请求和 HTTP 响应消息的格式是类似的,结构如下: 初始状态行 + 回车换行符(回车+换行) 零个或多个标题行+回车换行符 一个空白行,即回车换行符 一个可选的消息主体,比如文件.查询数据 ...
- Android必知必会-Fragment监听返回键事件
如果移动端访问不佳,请尝试 Github版<–点击左侧 背景 项目要求用户注册成功后进入修改个人资料的页面,且不允许返回到上一个页面,资料修改完成后结束当前页面,进入APP主页. 由于是使用多个 ...
- iOS下JS与OC互相调用(二)--WKWebView 拦截URL
在上篇文章中讲述了使用UIWebView拦截URL的方式来处理JS与OC交互. 由于UIWebView比较耗内存,性能上不太好,而苹果在iOS 8中推出了WKWebView. 同样的用WKWebVie ...
- Objc中为何某些类的属性要设置为copy而不是strong?
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 不知道大家是否注意,我们再使用一些第三方类的时候大多数情况下对 ...
- Hibernate进阶知识点必备
hibernate.cfg.xml的常用的配置 hibernate.show_sql:是否把Hibernate运行时的SQL语句输出到控制台,编码阶段便于测试,为true的好 -hibernate.f ...
- JQuery实战---初识JQuery+入门实例
JQuery在小编的世界中,也就是JavaScript和查询(Query),即是辅助JavaScript开发的库,百度百科对JQuery的介绍比较详细,小伙伴可以东东自己可耐的小爪子,上网进行搜索,说 ...
- Android开发-Listview中显示不同的视图布局
1. 使用场景 在重写ListView的BaseAdapter时,我们常常在getView()方法中复用convertView,以提高性能.convertView在Item为单一的同种类型布局时,能够 ...
- String之常量池小结
1.String 常量池 String使用private final char value[ ]实现字符串的存储,也就是说String创建对象之后不能够再次修改此对象中存储的字符串内容,因而Strin ...
- 毕加索的艺术——Picasso,一个强大的Android图片下载缓存库,OkHttpUtils的使用,二次封装PicassoUtils实现微信精选
毕加索的艺术--Picasso,一个强大的Android图片下载缓存库,OkHttpUtils的使用,二次封装PicassoUtils实现微信精选 官网: http://square.github.i ...
- Java JDBC封装模式
模仿DBUtils里面的一些用法,下面是一些简单的实现数据集的操作的方法 下面使用到的两个bean.首先是userbean package bean; public class user { Stri ...