2013-08-02 5 views
0

Существует 3 основных способа создания пользовательских интерфейсов для RubyMotion, с OS X в качестве цели.Плюсы и минусы различных способов создания пользовательских интерфейсов для Rubymotion (и, возможно, MacRuby)

На данный момент я пытаюсь создать простой файл/URL-адрес выбора.

simplefile chooser

Просто код все 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?

ответ

2

Это строго личное предпочтение. Если вы счастливы в создании NIB, тогда создайте NIB. Мое личное предпочтение - Teacup, но это ни здесь, ни там.

У обоих есть плюсы и минусы, верно? Про решение Ruby - Ruby. Кон будет одинаковым. Если вы не любите прямой код или предпочитаете графическую среду, тогда NIB могут поместиться лучше.

Если ваша проблема заключается в калибровке и вещах, помните, что вы всегда можете использовать REPL, чтобы настроить вещи, чтобы понять, как все выглядит.

Я лично предпочитаю писать код, чтобы перетащить развитие, но опять же, это мое мнение и основы позиции RubyMotion на эту тему.

 Смежные вопросы

  • Нет связанных вопросов^_^