当前位置:  编程技术>移动开发
本页文章导读:
    ▪Wax框架简要教程(3)开始使用Wax        Wax框架简明教程(3)开始使用Wax 概述这是Wax框架的一个快速教程。通过本教程,最终你会明白在OC中使用Wax是多么的有趣。Wax是OC和Lua之间的黏合剂。也就是说,你可以在OC和Lua之间进行通信。.........
    ▪ 手机怎么取消安全模式        手机如何取消安全模式 手机如何取消安全模式? 不知什么时候手机进入安全模式,屏幕左下方一直显示安全模式,许多已下载的软件没有了。我尝试用以下办法,将安全模式取消了,系统已.........
    ▪ Wax框架精简教程(1) 简介       Wax框架简明教程(1) 简介 项目地址:https://github.com/probablycorey/wax 一、什么是WaxWax是一个用lua语言编写本地iPhoneapp的框架。它使用OC运行时将OC和Lua进行绑定。通过Wax,你可以用Lua做任何OC可以.........

[1]Wax框架简要教程(3)开始使用Wax
    来源: 互联网  发布时间: 2014-02-18
Wax框架简明教程(3)开始使用Wax

 

概述

这是Wax框架的一个快速教程。通过本教程,最终你会明白在OC中使用Wax是多么的有趣。

  • Wax是OC和Lua之间的黏合剂。也就是说,你可以在OC和Lua之间进行通信。
  • 通过Wax,使用Lua访问Cocoa类如同在OC中一样简单。

 

NSString -- 返回 NSString

UIView -- 返回 UIView

 

UITableView -- 下面这一行的“语法糖”

wax.class["UITableView"]-- Wax原生调用,你不必了解

 

 

  • 当年你创建OC实例时,不需要使用alloc,Wax会为你这样做。

  -- 天啊,不需要alloc,retain 和 release了 !  

local view = UIView.initWithFrame(CGRect(0, 0,100, 100))

  • 用Lua创建OC类,使用函数waxClass{CLASS_NAME,PARENT_CLASS}。所有后续加入的函数(同一Lua文件中)都会自动添加为该类的实例方法。

waxClass{"MyClass",NSObject}

 

  -- 声明协议

waxClass{"MyClass",NSObject, protocols = {"UITableViewDelegate","UITableViewDataSource"}}

 

  -- 注意!协议名是字符串形式(因为它们并不是类)REMEMBER!

  • 调用Lua函数时,使用{}而不是()(看waxClass函数的调用)。这是用一个Lua表来传递参数的“语法糖”。

-- 等同于第2句

waxClass{"MyClass", NSObject}  

-- 大括号可以忽略,等同于第1句

waxClass({"MyClass", NSObject})   -- ...omitting the parenthesis ismuch more pretty, so that's how we roll.

  • 对于waxClass函数,第1个参数总是self,以便用Wax模拟除OC的面向对象模型。

 

waxClass{"MyClass",NSObject}

 

  -- 注意函数第1个参数为self。这就持有了MyClass实例对象

functionstoreWords(self, words)

    self.words = words

   

    -- Wax在self对象中创建了一个'super'的成员变量

    -- 以便调用父类方法

    self.super:words(self)

end

 

 

  • 使用冒号 : 代替点号 . 来调用OC方法。这将把调用者自身作为第1个参数传给该方法。

--在Lua中,使用冒号 : 进行方法调用

 UIApplication:sharedApplication()   

--... 等同于

 UIApplication.sharedApplication(UIApplication)   

--使用冒号 : 是为了让代码变得简单和可读

  • 如果OC 方法有多个参数,用下划线 _ 代替冒号 : 。

在OC中

[UIAlertView initWithTitle:@"title"message:@"message" delegate:nil];

使用Wax

 UIAlertView:initWithTitle_message_delegate("title","message", nil)

  • Wax不使用OC属性。它强制Lua和OC只通过方法调用来通信

 

someView.frame -- 这样不行

 

-- 只能用 getter/setter 方法

someView:frame()

someView:setFrame(someFrame)

 

  • 通过点号. 可以为对象动态创建成员变量。不同于冒号 : (用于调用OC的类/实例方法),在 Lua 代码中点 .  能够动态创建成员变量(在对象的 OC 代码中则完全不知道这些变量)。这些成员变量在对象生命周期中是有效的。

--在Lua中用冒号: 进行方法调用…

localview = UIView:init()   

view.someRandomVariable= "YEAH!"  

--你能把任何对象赋值给一个实例,它会一直存在

  • Wax视图将OC对象转换为Lua原始类型。反之亦然,如果OC方法有一个NSString参数,你直接传递一个Lua字符串给它。

local fileManager =NSFileManager:defaultManager()  

local contents =fileManager:directoryContentsAtPath(".")  

-- directoryContentsAtPath 返回一个 NSArray, 但 Wax 将之转换为 Lua table 

print(contents[1]) --> "info.plist"   

-- NSDictionaries 变成 Lua tables  

-- NSArrays 变成Lua tables  

-- NSStrings 变成Lua strings  

-- NSNumbers 变成Lua numbers

  • 如果你不象OC对象被自动转换,则可以使用toobjc方法。

 

-- 如果你这样调用NSString的方法是不行的

local string = "astring"

string:capitalizedString()

-- 这是因为string已经被强制转换为Luastring了

 

-- 使用toobjc,避免NSString被强制转换为Luastring

toobjc(string):capitalizedString()

 

 

   

  • 枚举类型,比如UITableViewStylePlain,已经被硬编码了。目前,大部分常用枚举定义在APP_ROOT/wax/stdlib/enums.lua中。以后我希望在iPhone中使用桥接的方式以便枚举和结构能动态创建。
  • 要传递一个selector,直接使用字符串。例如在OC中,selector被写成@selector(this:is:a:method),在Wax写成this:is:a:method即可。
  • 结构体也同枚举一样。最常用的结构体都声明在APP_ROOT/wax/wax-scripts/structs.lua中。根据structs.lua文件中的模板很容易添加新的结构体。

 

wax.struct.create("CGRect","ffff", "x", "y", "width","height")

 

  -- 创建一个全局函数叫做CGRect,带有4个float参数

  -- 第2个参数"ffff"定义了4个参数的类型

 

  local rect = CGRect(1, 2, 3, 4)

  print(rect.x) --> 1

  rect.x = 200

  print(rect.x) --> 200



    
[2] 手机怎么取消安全模式
    来源: 互联网  发布时间: 2014-02-18
手机如何取消安全模式
手机如何取消安全模式?

不知什么时候手机进入安全模式,屏幕左下方一直显示安全模式,许多已下载的软件没有了。我尝试用以下办法,将安全模式取消了,系统已恢复到以前状态。
1.重装电池;
2.重新开机:在开机显示第二界面(屏幕显示htc quietly brilliant)时,按住音量增加键至主题桌面出现,即会发现恼人的安全模式已取消,尝试一下吧。

1楼a841181169昨天 19:45.................

    
[3] Wax框架精简教程(1) 简介
    来源: 互联网  发布时间: 2014-02-18
Wax框架简明教程(1) 简介

 项目地址:https://github.com/probablycorey/wax

 

一、什么是Wax

Wax是一个用lua语言编写本地iPhoneapp的框架。它使用OC运行时将OC和Lua进行绑定。通过Wax,你可以用Lua做任何OC可以做到的事情!你还等什么?赶快开始吧!

 

二、为什么用Lua编写iPhoneapp?

我喜欢写iPhone app,但仅限于使用动态语言而不是用OC来写它们。为什么许多人宁愿用Lua+Wax而不是OC?有以下几个原因:

q垃圾自动回收!alloc、retain和release的日子终于一去不复返了!

q更少的代码!不再有头文件,不再有静态类型、数组和字典语句!Lua使你的代码行数减少。

q能访问Cocoa、UITouch、Foundation这些框架,每一样都不少!Wax会将OC框架自动暴露给Lua,你想要的每个框架仍然是有效的!

qHTTP请求更简单。与RESTwebservice进行交互从来没有这么容易过!

qLua支持闭包,即块语句!如何使用过它们的人都知道它们是如何的强大。

qLua内置了正则表达式匹配库。

三、例子

关于Wax app的简单示例,请看examples文件夹。

 

如何创建UIView并设为红色?

 

--忘掉alloc吧!内存由Wax自动管理

view= UIView:initWithFrame(CGRect(0, 0, 320, 100)) 

--用冒号向OC对象发送消息

--所有UIView对象的方法都可用这种方法访问

view:setBackgroundColor(UIColor:redColor())

 

如何调用多个参数的方法?

 

--在方法名中加入下划线连接参数,然后象使用正常的C函数一样使用

UIApplication:sharedApplication():setStatusBarHidden_animated(true,false)

 

如何传递array/string/dictionary参数?

 

--Wax自动转变array/string/dictionary为NSArrayv/NSString/vNSDictionary对象(以及逆转换)

images= {"myFace.png", "yourFace.png", "theirFace.png"}

imageView= UIImageView:initWithFrame(CGRect(0, 0, 320, 460))imageView:setAnimationImages(images)

 

如何创建一个UIViewController子类?

 

--在"MyController.lua" 中创建

--创建一个OC类MyController,继承自UIViewController

--这其实是一个OC对象,如果有必要的话,你甚至可以在OC代码中引用它

waxClass{"MyController",UIViewController} 

functioninit()  

--要调用父类方法,显式地使用self.super

self.super:initWithNibName_bundle("MyControllerView.xib",nil)  

returnself

end 

functionviewDidLoad()  

--在这里写入其它代码

end

 

你说HTTP调用会很轻松,我才不信呢…

 

url= "http://search.twitter.com/trends/current.json" 

--异步调用,当收到应答调用回调函数

wax.http.request{url,callback = function(body, response)  

--发出NSHTTPURLResponse 请求 

puts(response:statusCode())   

--由于content-type为json, Wax 会自动解析并将之封装到Luatable类型

puts(body)

end}

 

因为Wax会自动将NSString,NSArray,NSDictionary和NSNumber转换为原生的Lua值,有时候你必需强制转换回OC对象,例如:

 

local testString ="Hello lua!"

local bigFont =UIFont:boldSystemFontOfSize(30)

local size =toobjc(testString):sizeWithFont(bigFont)

puts(size)

 



    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3