• IOS Web App初步使用 - 基于PhoneGap框架
    时间:2012-01-31   作者:shenyue   出处:ued.sina.com

    iOS Web App开发,配合HTML5,是目前比较热门的话题。今天,先抛开HTML5,我们来尝试在PhoneGap框架上进行简单的开发。

    IOS Web App初步使用

    PhoneGap是一个使用HTML,CSS和JavaScript的,创建移动跨平台移动应用程序的快速开发平台。它使开发者能够利用iPhone,Android,Palm,Symbian,WP7,Bada和Blackberry等智能手机的核心功能——包括地理定位,加速器,联系人,声音和振动等,此外PhoneGap拥有丰富的插件,可以以此扩展无限的功能。PhoneGap是免费的,但是它需要特定平台提供的附加软件,例如iPhone的iPhone SDK,Android的Android SDK等。

    PhoneGap的优点:


    1、兼容性。完全做到了written once, run everywhere。

    2、标准化。PhoneGap用W3C标准,特别标准,Web App直接一字不改就能运行。尤其是和JQ Mobile结合在一起使用,实在是威力无穷啊。

    3、配合使用JavaScript+HTML5,潜力巨大。

    当然目前PhoneGap缺陷还是蛮多的,比如运行速度慢,UI反应延时——这是个致命伤。不过嘛,这种问题是会随着技术的进步而消失的。它的优势是无以伦比的:开发成本低(包括跨平台)。当然,Native App永远会有一席之地,比如高端游戏。

    一、    开发准备


    1、首先需要一台运行苹果系统的电脑,装好Xcode,如果需要真机调试,还需要开发者证书。

    2、去http://phonegap.com/下载最新版的PhoneGap,目前是1.3版本。

    3、把下载完的zip文件解压缩,双击运行里面的一个dmg镜像,进行安装。

    4、打开Xcode,新建工程,就会看到PhoneGap-based Applicaton,就是它了。

    PhoneGap

    二、    注意事项

    1、    用PhoneGap-based Applicaton向导生成工程以后,按command+B,生成一下。打开工程文件所在的目录,就会看见一个www的目录,拖拽到Xcode中,选择引用即可。强调一下,必须选择引用方式,这样www目录在Xcode中是蓝色的。www目录下放的就是web端的一些文件(html/css/js/image)。

    PhoneGap

    2、    在PhoneGap中,如果需要访问外部链接是需要授权的,在phonegap.plist文件中可以看到,有一个ExternalHosts数组,里面可以配置。顺便说一下,Plugins下可以清楚的看到,可以使用iOS的本地核心组件,例如相机,联系人等等。

    ExternalHosts

    三、    例子说明

    例子很简单,在向导生成的基础上,加上了模拟Path应用程序的左下角的快捷菜单功能,并且通过PhoneGap框架调用iOS的Camera模块。先来看看截图吧:
    Camera
    基于PhoneGap框架的开发非常适合有web开发经验的开发者,因为里面基本上都是Html/CSS/js。比如快捷菜单的功能,在html文件中代码如下:

    <footer class="op-footer">
          <a href="javascript:photo();toggle_menu();"><img id="path_photo" class="path_icon" src="image/icon/1.png" /></a>
          <a href="javascript:toggle_menu();"><img id="path_people" class="path_icon" src="image/icon/2.png" /></a>
          <a href="javascript:toggle_menu();"><img id="path_place" class="path_icon" src="image/icon/3.png" /></a>
          <a href="javascript:toggle_menu();"><img id="path_music" class="path_icon" src="image/icon/4.png" /></a>
          <a href="javascript:toggle_menu();"><img id="path_thought" class="path_icon" src="image/icon/5.png" /></a>
          <a href="javascript:toggle_menu();"><img id="path_sleep" class="path_icon" src="image/icon/6.png" /></a>
          <a href="javascript:toggle_menu();"><img src="image/path_menu@2x.png" width="40" id="path_button"/></a>
    </footer>

    CSS中的op-footer让按钮在左下角,toggle_menu函数用于扩展和收缩菜单,photo函数调用系统拍照功能。

    function toggle_menu()
    {
        if( $('#path_button').hasClass('path-extend') )
        {
            // 收缩
            $('#path_button').removeClass('path-extend');
            $('#path_photo').animate( { 'left' : '10px' , 'top': '10px' } , 200 , function(){} );
            $('#path_people').animate( { 'left' : '10px' , 'top': '10px' } , 180 , function(){} );
            $('#path_place').animate( { 'left' : '10px' , 'top': '10px' } , 160 , function(){} );
            $('#path_music').animate( { 'left' : '10px' , 'top': '10px' } , 140 , function(){} );
            $('#path_thought').animate( { 'left' : '10px' , 'top': '10px' } , 120 , function(){} );
            $('#path_sleep').animate( { 'left' : '10px' , 'top': '10px' } , 100 , function(){} );
        }
        else
        {
            // 扩展
            $('#path_button').addClass('path-extend');
            $('#path_photo').animate( { 'left' : '-5px' , 'top': '-100px' } , 100 , function(){} );
            $('#path_people').animate( { 'left' : '31px' , 'top': '-94px' } , 120 , function(){} );
            $('#path_place').animate( { 'left' : '59px' , 'top': '-78px' } , 140 , function(){} );
            $('#path_music').animate( { 'left' : '82px' , 'top': '-56px' } , 160 , function(){} );
            $('#path_thought').animate( { 'left' : '98px' , 'top': '-25px' } , 180 , function(){} );
            $('#path_sleep').animate( { 'left' : '104px' , 'top': '10px' } , 200 , function(){} );
        }
    }
    function photo()
    {
    // 通过PhoneGap框架调用iOS的Camera模块
    navigator.camera.getPicture(function(imageURI){$('#refresh_image').attr('src',imageURI);},
    function(message) {alert('get picture failed' + message );},
    {
                quality: 50,
                destinationType: navigator.camera.DestinationType.FILE_URI,
                sourceType: navigator.camera.PictureSourceType.CAMERA
            }
        );
    }
    可以看到,这些js中的函数都使用到了jQuery,非常方便实用。

    四、    总结

    基于PhoneGap框架的iOS Web App的开发真的很方便实用,把工作量都转移到了Web开发,但也是有代价的,性能上肯定不如Native App高效,在一些用户体验需求不是很强的地方可以考虑使用。

    网友留言/评论

    我要留言/评论

    相关文章

    火狐下flash重新加载的bug的解决方法:做项目的时候遇到一个bug,firefox下一个弹层会引起flash重新加载,而其他浏览器就没有这样的bug。
    谈优秀程序员的性格:我们一直都在讨论,性格决定命运。那么什么样的性格让你具有一个优秀程序员的潜质?要得到这个答案,我们必须要搞清楚优秀程序员的定义。对于一个程序员,我们用什么样的标准来衡量一个程序员是否优秀 。
    我们应当怎样做需求分析:又到新年了,日历又要从2011年翻到2012年了,这使我有太多的感慨,进而勾起了对太大往事的回忆。过去的10年,毫无疑问是中国软件业发展最快的10年。当我们刚刚毕业的时候,还在使用VB、PB开发一些简单的数据库应用,而现在却几乎看不到它们的踪影,换来的是诸如J2EE和.NET这样的大型web应用。而这期间,RUP、XP、敏捷开发、持续集成••••••一个接一个的新概念层出不穷,令人眼花缭乱。现在想来,恍如隔世。
    如何选择Sencha Touch 和 jQuery Mobile:如果你正在面临是选择 jQuery Mobile 或者是 Sencha Touch ,那么请阅读此文,下面这些因素是你需要考虑的。
    Android 4.0设计规范 优先导读 十大改变 (附全文翻译pdf):在拜读和翻译了Android design设计指导后,对比Android 4.0与Android2.3及之前版本的app设计指导,总结了Android 4.0设计的10大改变。
    拒绝平庸——浅谈Web登录页面设计:用户活跃度是检验产品成功与否的重要指标之一,传统行业的商家极为重视门面的装潢,因为一个好的门面可以聚集人气,招揽更多的顾客。古时候的大户人家院子门口的石狮子或其他的摆件的摆放极为讲究,有一定的风水学说道理,更能彰显主人家的身份地位.由此可见,“门面’就如人的脸面之于人的形象一样重要,而WEB的登录页面就相当传统的“门面”。
    给设计师和开发者提供的 50 个web开发免费在线工具:设计和维护一个网站并不是一件很容易的事情,他需要花费很多的时间,这就是设计师和开发人员为什么经常去搜寻各种工具来帮助他们提高工作效率。其中网络上有很多相关工具,但是并不是所有的工具都是那么好用。所以今天我们总结了一个工具列表,这将会为设计师和开发工程师非常有用。如果您还有更好的工具,请提出建议,我们也将此呈现给广大设计师们。
    2012年开发者该做的11件事:2011年即将结束,2012正在靠近。你是否在专业领域给自己设定2012的目标?不管你的答案如何,我相信下面列出的11条建议里面总有一两条适合你 :)
    【iShout】Metro UI 的简洁是另一种复杂:Metro UI 推出来的时候,对比其他系统的图标海洋,确实让人眼前一亮,活动格窗取代图标,内容取代形式,微软的宣言是让智能手机用户有更高的效率得处理事务,而不是专注于智能手机本身。但果真如此吗?在我看来,Metro UI 设计得的最初目的是简洁,最后产生的结果却不一定是简洁。
    网络开发新项目阶段总结:摘取人人网上某位高人的针对新项目做的总结,全文如下: