Lua(簡稱擼?。┰趇OS中的確被廣泛的使用著,在行業(yè)中最著名的莫過于魔獸世界(山口山)以及移動互聯(lián)網(wǎng)的憤怒的小鳥。
Lua在cocos2d以及iOS的應用動態(tài)變化上面使用比較廣泛,下面我們用兩個例子來說明下。
框架
不得不說,最著名的莫過于wax和waxpatch,一個是能夠在iOS中使用lua語言編寫界面控件,一個是能夠動態(tài)更新。
Wax是什么?
Wax是一個框架,讓你可以用Lua開發(fā)原生的iPhone應用。Wax把Lua和Objetive-C的類庫連接起來,也就是說,你可以用Lua使用任何的Objective-C類及框架。
為什么使用Wax?
Wax是免費的、開源的。你總是可以改動源代碼,以滿足自己的需要。
用Lua這種高效腳本語言編寫代碼可以大大節(jié)省時間
可以使用所有現(xiàn)有的Objective-C庫
可以讓你的App在線更新一些功能,不再需要經過蘋果App Store的審核,不過被蘋果發(fā)現(xiàn)你的應用下載代碼的話可能會被拒絕。
2.7 Apps that download code in any way or form will be rejected
2.8 Apps that install or launch other executable code will be rejected
新建iOS APP項目,使用Empty Application模板,命名為HelloWax
解壓縮wax.framework.zip,將wax.framework添加到項目中,選擇“Copy items into destination group's folder”復選框
AppDelegate.h文件,導入Wax包頭文件:
# import <wax/wax.h>
AppDelegate.m文件,在application:didFinishLaunchingWithOptions:方法中,添加代碼:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
wax_start("init.lua", nil);
return YES;
}
項目中新建文件init.lua:
require "ViewController"
viewController = ViewController:init()
window = UIApplication:sharedApplication():keyWindow()
window:setRootViewController(viewController)
項目中新建文件ViewController.lua:
waxClass{"ViewController", UIViewController}
function viewDidLoad(self)
self.super:viewDidLoad(self)
local label = UILabel:initWithFrame(CGRect(0, 120, 320, 40))
label:setColor(UIColor:blackColor())
label:setText("Hello Wax!")
label:setTextAlignment(UITextAlignmentCenter)
local font = UIFont:fontWithName_size("Helvetica-Bold",50)
label:setFont(font)
self:view():addSubview(label)
end
先不要急著編譯,我們還需要更改一下編譯的方式以及確認framework已經被準確導入
運行,搞定,Hello Wax!
關于Wax的語法
Lua中的函數(shù)名稱不能有冒號。
為了補償這個差異,凡是Objective-C中隔開方法名稱的地方,在Lua中都換成下劃線。比如說以上程序的 UIFont:fontWithName_size("Helvetica-Bold",50)對應于Objective-C的[UIFont fontWithName:@"Helvetica-Bold" size:50]Lua沒有像Objective-C那樣的繼承體系。Lua中根本沒有類。
想通過Lua創(chuàng)建一個Objective-C類,就要使用waxClass{“CLASS NAME”, “PARENT_CLASS”}這個函數(shù)。你添加到該Lua文件的所有之后的函數(shù)(在同一個文件里面)都會作為實例方法,自動添加到新的類。
waxClass{"ViewController", UIViewController}
Wax不支持Objective-C屬性。只能使用View:setFrame(someFrame),不能使用someView.frame。