ProMotion is a RubyMotion gem that makes iOS development more like Ruby and less like Objective-C. It introduces a clean, Ruby-style syntax for building screens that is easy to learn and remember and abstracts a ton of boilerplate UIViewController, UINavigationController, and other iOS code into a simple, Ruby-like DSL.
# app/app_delegate.rb
class AppDelegate < PM::Delegate
status_bar true, animation: :fade
def on_load(app, options)
open RootScreen
end
end
# app/screens/root_screen.rb
class RootScreen < PM::Screen
title "Root Screen"
nav_bar true
def on_load
set_nav_bar_button :right, title: "Help", action: :open_help_screen
end
def open_help_screen
open HelpScreen
end
end
# app/screens/help_screen.rb
class HelpScreen < PM::TableScreen
title "Table Screen"
def table_data
[{
title: "Help",
cells: [
{ title: "About this app", action: :tapped_about },
{ title: "Log out", action: :log_out }
]
}]
end
def tapped_about(args={})
open AboutScreen
end
def log_out
# Log out!
end
end
Screens | Navigation Bars | Tab Bars |
---|---|---|
Table Screens | Grouped Tables | Searchable | Refreshable |
---|---|---|---|
SplitScreens | Map Screens | Web Screens |
---|---|---|
NEW [Live reloading!](http://promotion.readthedocs.org/en/master/Guides/Live Screen Reloading/) Use pm_live_screens
to enable it, and on_live_reload
in your screen to refresh things.
- Check out the Getting Started Guide
- Watch the excellent MotionInMotion screencast about ProMotion (very reasonably priced subscription required)
- Follow a tutorial: Building an ESPN app using RubyMotion, ProMotion, and TDD
- Read the Documentation
This release includes several new features and is backwards compatible with all 2.x releases.
- PR #686 Adds :searchable to the whitelisted properties a cell can have so that a warning is not generated.
- PR #688 Adds support for SDWebImage and takes preference over JMImageCache. JMImageCache will still be supported till ProMotion 3.0 but we highly recommend you switch to SDWebImage.
- PR #679 Extract methods from tablescreen for reuse in modules for redpotion.
- PR #677 Added
add_child_screen
andremove_child_screen
methods toPM::Screen
. - PR #687 Adds persisting tab order when changed by the user for tab bars over 5 screens.
This release includes several new features and is backwards compatible with all 2.x releases.
- PR #618 Allow search bar to be hidden initially
- PR #606 Adds capability for table_footer_view
- PR #602 Add image inset support for tab bar item
- PR #595 Feature/support module
- PR #582 Allow setting of multiple nav bar buttons instead of just one left an one right
- PR #581 Adds on_tab_selected
- PR #579 implemented nav_bar_button class method RE #272
- PR #565 Adds header_will_display method to PM::TableScreen
- PR #663 Adds
on_load
back to cell dequeue code - PR #641 Custom search for PM::TableScreen
- PR #658 Fix cell height issue
Open a pull request! We love adding new ProMotion-built apps.
We've created a comprehensive and always updated wiki with code examples, usage examples, and API reference.
- Watch Jamon Holmgren give a talk about ProMotion at RubyMotion #inspect2014 (video)
- Watch the September 2013 Motion Meetup where Gant Laborde interviews Jamon Holmgren about ProMotion
ProMotion is not only an easy DSL to get started. The community is very helpful and welcoming to new RubyMotion developers. We don't mind newbie questions.
If you need help, feel free to open an issue on GitHub. If we don't respond within a day, tweet us a link to the issue -- sometimes we get busy.
See CONTRIBUTING.md.
- Jamon Holmgren: @jamonholmgren
- Silas Matson: @silasjmatson
- Mark Rickert: @markrickert
- Ryan Linton: @ryanlntn
- David Larrabee: @squidpunch