Существует 3 основных способа создания пользовательских интерфейсов для RubyMotion, с OS X в качестве цели.Плюсы и минусы различных способов создания пользовательских интерфейсов для Rubymotion (и, возможно, MacRuby)
На данный момент я пытаюсь создать простой файл/URL-адрес выбора.
Просто код все UI, это рубин
lineHeight=25
#to specify coordinates from upper left, we need to substract lineHeight from coordinates
yoffset=100
#the "line" at which we will begin drawing
[email protected][1].height-lineHeight-yoffset
label = NSTextField.alloc.initWithFrame([[20, y], [50, lineHeight]])
label.stringValue = "File :"
label.bordered = false
label.editable = false
label.drawsBackground = false
@mainWindow.contentView.addSubview(label)
text_url = NSTextField.alloc.initWithFrame([[70,y],[300, lineHeight]])
text_url.stringValue = "http://www.rubymotion.com"
text_url.autoresizingMask = NSViewMinXMargin|NSViewMinYMargin|NSViewWidthSizable
@mainWindow.contentView.addSubview(text_url)
button = NSButton.alloc.initWithFrame([[370, y], [60, lineHeight]])
button.target = self
button.bezelStyle = NSRoundedBezelStyle
button.autoresizingMask = NSViewMinXMargin|NSViewMinYMargin
button.Title = "..."
@mainWindow.contentView.addSubview(button)
Используйте камень Чайная RubyMotion (я не могу пару ее Pixate, потому что я целевой OS X)
class MainWindowController < TeacupWindowController
stylesheet :main_window
layout do
@y='100%-125'
subview(NSTextField, :boutons,
string: 'File :', width: 50, height:25, left:20, top:@y,
bordered: false, editable: false, drawsBackground: false, stringValue:'File : ')
subview(NSTextField, :boutons, width: '300', height:25, left:80,
stringValue: 'http://www.rubymotion.com :', top:@y, autoresizingMask: NSViewMinXMargin|NSViewMinYMargin|NSViewWidthSizable)
subview(NSButton, :boutons, width: '60', height:25, left: 400, top:@y,
bezelStyle: NSRoundedBezelStyle,
autoresizingMask: NSViewMinXMargin|NSViewMinYMargin,
title: '...'
)
end
end
или загружаете СИБ
def buildWindowFromNib
@nibObjects=Pointer.new(:object)
NSBundle.mainBundle.loadNibNamed('View', owner:self, topLevelObjects:@nibObjects)
@nibObjects.value.each do | object |
if object.class.to_s=="NSWindow"
p "NSWindow found in nib !"
@mainWindow=object
end
end
end
Делая свой выбор!
Я знаю, что в Teacup есть сила, которую я еще не развязал - Наследование, Стили, гнездование ...-. Но из 3-х способов я нахожу те, которые кодируют UI утомительный и многословный, даже для кого-то, кто использовал кодирование html, css, js, php с emacs. Кроме того, трудно быть точным (например, использование одной и той же высоты для кнопки, а метка приводит к неправильному выравниванию).
Но поддержка RubyMotion, говорит
Мы не считаем, что Xcode делает хорошую среду для рубинового развития (или развития в целом). Ruby также делает очень легким , чтобы написать отличные Языки, которые могут использоваться как элегантные альтернативы графическому интерфейсу пользователя или инструментам моделирования данных.
Я новичок в программирование OS X, и я хотел бы, чтобы сделать осознанный выбор со следующими неявным советом RubyMotion (в это сделать DSL-акой Teacup путем) или использовать GUI путь.
Каковы плюсы и минусы кодирования пользовательского интерфейса и его создание на NIB?