`

iPhone+wp7并行初体验

    博客分类:
  • IOS
 
阅读更多

同时学iPhone和wp7开发(一)

去年看iPhone很火,心头痒痒就去买了本iPhone开发入门经典,那时候没现在这么多书(现在书城里都有一书架的iPhone开发书籍了),这本入门经典是网上很多人推荐的。兴冲冲买回来就看了第一章。可怜啊,加班经常半夜1,2点,回来倒头睡,电脑都不想摸一下。书就放在那里落满了灰尘。最近有了时间,心想不能让69块钱白花呀,于是把书皮上的灰尘擦去,又开始了iPhone开发的学习。我没有c/c++和obj-c的经验,就会点C#,还是不精通那种,mac也从没拥有过。算是从零开始。然后又突发奇想,在学习iPhone开发时,顺便也学习WP7的开发,虽然Silverlight,XNA,WPF之类的都一点不会,好赖还有C#的语言基础,至少不用学语法了。

 

准备环境:

  wp7:下载vm_web2.exe,运行,网络顺畅的话,很快搞定。

      这些就是安装后的工具:m1

  iPhone:没有mac,只能在虚拟机上安装,怎么安装,网上教程一大把,照着做就行了。用的Vmware,安装时是雪豹10.6.0,可以通过软件更新升级到10.6.8,Xcode用的3.2.4,ios sdk是4.1,为什么不是最新版的sdk呢,这个后面讲。

  

三个Hello World:

  环境准备完毕,我们来写三个Hello World,wp7一个,iPhone两个,为什么是两个呢,有一个是MonoTouch写的

  wp7版:打开VS2010 Express For WP,New---Project

vm_web2下载的是wp7.1 sdk,所以能看到项目模板里有VB了,以前7.0是不能用VB来编写的。当然,我们还是用C#来写。

选择Window Phone Application,确定后会弹出选择wp7.0还是wp7.1,选择完毕后,VS会创建好工程目录。

我们是从零开始,不会SL,不会XNA,就当在做WinForm把,从ToolBox拖出来两个控件,按钮和文本标签

设置一下标签和按钮的属性,然后双击按钮,生成事件,在事件里写代码。。多么熟悉的操作步骤啊。跟WinForm一样。

 

生成的XAML代码:

View Code
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
   <TextBlock Height="96" HorizontalAlignment="Left" Margin="73,81,0,0" Name="lbShow" Text="" VerticalAlignment="Top" Width="311" FontSize="56" TextAlignment="Center"/>
   <Button Content="Click" Height="72" HorizontalAlignment="Left" Margin="144,231,0,0" Name="btnClick" VerticalAlignment="Top" Width="160" Click="btnClick_Click" FontSize="28"/>
</Grid>

 

C#代码:

View Code
复制代码
publicpartialclass MainPage : PhoneApplicationPage
    {
        // Constructor
public MainPage()
        {
            InitializeComponent();
        }

        privatevoid btnClick_Click(object sender, RoutedEventArgs e)
        {
            lbShow.Text ="Hello World";
        }
    }
复制代码

 

 

分析:可以想想ASP.NET,用HTML做页面,用C#写逻辑。换成用XAML描述UI,还是用C#写逻辑。

总结:从第一个简单的HelloWorld Demo来看,没接触过SilverLight,只会WinForm或者WebForm完全没障碍。一行代码,两次拖拉,实现起来超级简单。

 

iPhone版:打开虚拟机,启动mac os,打开xcode,File----New Project----选iOS----Application---View-Based Application。

      Xcode像VS2010一样创建好了工程目录结构。参考着我1年前买的入门经典,再加上斯坦福大学的iPhone开发公开课第一课,尝试倒腾了俩小时,才做出了和上面wp7一样效果的一个Hello World。个中曲折最后总结再说,这里直接列出正确的步骤

首先双击Resources目录里的Hello_WorldViewController.xib,会调用Interface Builder打开这个xib文件

 

  同样拖拉出一个文本标签Label,一个按钮Round Rect Button,在iPhone中按钮是圆角按钮,拖到界面之后,就没那么容易了,按照思路,现在应该是给按钮写一个事件,当点击按钮时候,文本标签的字改变成Hello World,拆分开看,只要弄明白两件事,这活就成了。1,怎么设置标签的值,还是XXX.text = "xxx"吗? 2,怎么给按钮添加一个事件。双击现在是不成的啦。

首先,想通过代码读取或者设置控件的属性值,也就是想操作控件的话,不像wp7里那样,拖出控件来就可以用。必须在代码中先定义一个,然后和Interface Builder里拖出来的关联在一起,并设置它的get,set。要操作按钮,也要先定义。

  在Xcode里选Hello_WorldViewController.h,在里面定义:

View Code
复制代码
#import<UIKit/UIKit.h>

@interface Hello_WorldViewController : UIViewController {
    IBOutlet UILabel *lbShow;
}

@property (retain nonatomic) UILabel *lbShow;

-(IBAction)changeLabelText:(id)sender; 

@end
复制代码

  定义好了之后,在IB里关联。按住Ctrl从File's owner拖到label关联属性,右键点按钮,选Touch up Inside事件,点旁边的+号,拖到File's owner关联事件。

  好了,到这里,才算是做完了和wp7拖出俩控件一样的工作。可以写逻辑了。

  在Hello_WorldViewController.m里实现刚才定义的changeLabelText方法,看后面那个参数sender,想想wp7里事件的那个object sender参数,一样的东西。逻辑代码也就一行代码,和wp7一样。但为这一行代码要先做很多。。

View Code
@synthesize lbShow;

- (void)changeLabelText:(id)sender {
    lbShow.text =@"Hello World";
}

 

  点Build and Run,会在模拟器打开程序和wp7不同的是,wp7叫Emulator,ip叫Simulator

 

分析:抛开C#和Obj-C的语法差别,同样简单的功能,Xcode从UI自动生成代码的能力没有VS给力,属性,事件神马的都要自己定义再关联。但这样一来,貌似耦合就降低了,如同WebForm和MVC的区别。

总结:万变不离其宗,思路都是一样的,数据("Hello World"),逻辑("ChangeLabelText"),显示(XAML/XIB)。组织好数据,画好界面,然后用不同的逻辑来控制显示。同样写一个Hello World,wp7比iPhone做起来快很多,VS拖两下写一行搞定,Xcode+InterfaceBuilder拖四下写八行有木有。。

 

MonoTouch版:

  obj-c初看很蛋疼,一个Hello World搞很久,所以也试着用MonoTouch来搞,看看有没有wp7写起来那么“效率”,Mono版本是2.10.5,MonoDevelop是2.6

关于MonoTouch,园子里知识库有文章,从安装到使用,老赵还写了怎么用VS2010来搞MonoTouch。先来New一个Solution,选iPhone and IPad---iPhone Window Based Application,创建之。注意,MonoDevelop还不支持输入中文,显示中文也会乱码,在设置中把语言改成英文。创建成功后如下图,好亲切的C#呀

双击xib文件,会调用Interface Builder打开,重复和Xcode开发时一样的工作,拖控件,这里不需要先在代码里定义,而是利用AppDelegate来添加关联。在IB里搞定后,保存,会发现已经在同名的xxx.xib.designer.cs中自动生成了添加的控件和相应的事件。

View Code
复制代码
[MonoTouch.Foundation.Register("AppDelegate")]
    publicpartialclass AppDelegate {
        
        private MonoTouch.UIKit.UIWindow __mt_window;
        
        private MonoTouch.UIKit.UILabel __mt_lbShow;
        
        #pragma warning disable 0169
        [MonoTouch.Foundation.Export("changeLabelText:")]
        partialvoid changeLabelText (MonoTouch.UIKit.UIButton sender);

        [MonoTouch.Foundation.Connect("window")]
        private MonoTouch.UIKit.UIWindow window {
            get {
                this.__mt_window = ((MonoTouch.UIKit.UIWindow)(this.GetNativeField("window")));
                returnthis.__mt_window;
            }
            set {
                this.__mt_window = value;
                this.SetNativeField("window", value);
            }
        }
        
        [MonoTouch.Foundation.Connect("lbShow")]
        private MonoTouch.UIKit.UILabel lbShow {
            get {
                this.__mt_lbShow = ((MonoTouch.UIKit.UILabel)(this.GetNativeField("lbShow")));
                returnthis.__mt_lbShow;
            }
            set {
                this.__mt_lbShow = value;
                this.SetNativeField("lbShow", value);
            }
        }
    }
复制代码

 

嗯,分布类分布方法,只需要实现就行了。

View Code
复制代码
// The name AppDelegate is referenced in the MainWindow.xib file.
publicpartialclass AppDelegate : UIApplicationDelegate
    {
        // This method is invoked when the application has loaded its UI and its ready to run
publicoverridebool FinishedLaunching (UIApplication app, NSDictionary options)
        {
            // If you have defined a view, add it here:
            // window.AddSubview (navigationController.View);

            window.MakeKeyAndVisible ();
    
            returntrue;
        }
        
        partialvoid changeLabelText (MonoTouch.UIKit.UIButton sender)
        {
            lbShow.Text ="Hello World";
        }
    
        // This method is required in iPhoneOS 3.0
publicoverridevoid OnActivated (UIApplication application)
        {
        }
    }
复制代码

 

  保存后点小齿轮运行,模拟器顺利弹出

这里两个图标,第一个是Xcode开发的,后面的是MonoTouch

 

分析:看MonoTouch生成的代码,就是把Obj-C翻译成C#了,貌似是把ios的库都包装成了C#库,然后用C#来调用,MonoTouch就是一个代理者,负责把C#的东西转换成对ios sdk的调用。

总结:C#程序员用起来很爽快,不用学obj-c,工具也很顺手,开发效率上,写起来比wp7慢,比Xcode快(少了定义UI的代码,IB里拖拉之后自动生成了)

 

最后是设置Xcode免99刀真机调试程序的教程,我就是因为Xcode4+ios4.3没办法部署真机上,才用的3.2.4+ios4.1(我的3GS是4.1一直没升级过)

分享到:
评论

相关推荐

    200+套Axure元件库(小程序+可视化组件+iPhone+iPad+web)超全.zip

    Axure7元件库大合集 标签滑块.rplib 表格元素_Y!DSK.rplib 菜单和按钮_Y!DSK.rplib 操作系统元素_Y!DSK.rplib 窗体和容器_Y!DSK.rplib 弹出窗口Axure部件库.rplib 导航和分页_Y!DSK.rplib 电子商务Axure部件库.rplib...

    面向iPhone开发者的WP7 开发指南(上)

    面向iPhone开发者的WP7开发指南,是一份专为已有iPhone开发经验的开发者设计的资源,旨在帮助他们快速理解和适应Windows Phone 7(简称WP7)平台的开发环境。本指南将详细阐述iOS与WP7之间的差异,以及如何利用已有...

    面向iPhone开发者的WP7 开发指南(下)

    面向iPhone开发者的WP7开发指南(下)是一个专为熟悉iPhone开发的程序员设计的文档,旨在帮助他们理解和掌握Windows Phone 7(WP7)平台的开发技术。在iOS和WP7之间存在许多相似之处,但也有很多不同之处,这份指南...

    axure组件库iPhone+iOS通用rplib

    "axure组件库iPhone+iOS通用rplib"是设计iOS应用原型的强大工具,它为设计师提供了一站式的解决方案,帮助他们快速创建出高质量的、与iOS平台一致的原型设计,从而节省时间和精力,更好地专注于产品的功能和用户体验...

    iphone+开发基础教程+中文版.

    iphone+开发基础教程+中文版.可帮助初学者快速了解iPhone开发

    易语言iPhone+QQ在线

    《易语言iPhone+QQ在线》源码解析 在IT领域,开发者经常需要探索和学习不同的编程语言和技术,以便创建高效且用户友好的应用程序。在这个案例中,我们关注的是一个使用“易语言”编写的,与iPhone和QQ在线状态相关...

    iphone + blender 开发

    特别是随着智能手机性能的不断提升,用户对高质量视觉体验的需求日益增长,使得OpenGL在iOS平台上的应用更加重要。 **OpenGL(Open Graphics Library)**是一种用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序...

    微软推网页版WP7模拟器以吸引iPhone用户.docx

    这个模拟器尤其针对iPhone用户,因为他们可以通过Safari浏览器直接体验WP7独特的"Metro"界面,无需下载任何软件或应用。 "Metro"界面是Windows Phone 7操作系统的核心设计元素,以其简洁、直观和动态磁贴的设计风格...

    WP7仿iphone气泡式短信界面 v0.1源码

    这种界面设计通常用于短信应用中,模仿了iOS系统中对话气泡的显示方式,使得用户在WP7设备上也能体验到类似iPhone的交互效果。以下是基于这个项目的一些关键知识点和相关技术的详细解释: 1. **Windows Phone 7 (WP...

    WP7交互特性浅析及APP设计探究

    - **WP7**:作为一种新兴的体验模式,WP7通过独特的设计理念为用户带来新鲜感。在硬件兼容性方面,WP7既保持了一定程度的统一性,又允许生产商进行一定程度的定制。在用户体验上,WP7凭借其流畅的操作和优化的性能...

    iPhone+SDK编程入门经典:使用Objective-C

    ### iPhone SDK编程入门:使用Objective-C详解 #### 获取与理解iPhone SDK 对于任何希望进入iPhone应用开发领域的开发者而言,掌握如何获取与使用iPhone SDK(Software Development Kit)是至关重要的第一步。SDK...

    AppStore掘金—iPhone+SDK应用程序开发

    标题《AppStore掘金—iPhone+SDK应用程序开发》暗示了这本书是一本专注于iPhone应用开发的指南,特别是侧重于利用苹果公司提供的软件开发工具包(SDK)来创建可以在App Store上销售的应用程序。本书的内容对于希望将...

    已解锁-中文版iPhone+HIG_iPhone人机界面导引(交互设计指南)

    《已解锁-中文版iPhone+HIG_iPhone人机界面导引(交互设计指南)》是苹果公司针对iPhone平台提供的人机交互设计指导手册,此中译本由浙江科技学院交互设计与用户研究实验室师生共同翻译完成。该文档详细介绍了如何在...

    ios+ipad+iphone+android+pc跨平台兼容播放器

    支持跨终端播放,不仅适用PC端播放,也适配ipad、iphone、android手机、平板电脑等移动终端。 支持多系统多平台,PC端支持Window、MacOS、Linux 等,移动端支持Android、IOS、Window Phone等。 兼容HTML5,确保98...

    Axure元件库iPhone

    在Axure元件库iPhone中,设计师可以找到符合iOS风格的开关元件,这些开关有正确的动画效果和状态反馈,使得原型更接近真实的用户体验。 4. **列表项删除**:在iOS应用中,列表是常见的数据展示方式。iPhone元件库会...

    PhoneGap的插件(Andriod iPhone,WP,Sy都有)

    标题中的“PhoneGap的插件(Andriod iPhone,WP,Sy都有)”指的是PhoneGap支持的适用于Android、iOS(iPhone)、Windows Phone和Symbian这四大主流移动操作系统的插件。这些插件是PhoneGap生态系统的重要组成部分,它们...

    中英文结合iPhone+HIG_iPhone人机界面导引(交互设计指南).rar

    在iPhone应用设计中,它强调用户体验(UX)和用户界面(UI)的紧密配合,确保用户能够直观地理解和操作应用。这份指南提供了iPhone平台特有的设计原则和最佳实践,帮助开发者创建符合用户习惯的交互方式。 2. **多...

    [WP7开发书籍](WindowsPhone7DeveloperGuide)

    [WP7开发书籍](WindowsPhone7DeveloperGuide).源代码 WP7开发资源 开发教程 书籍 android开发iphone源码iosjava教程html5源代码安卓 全部都有哦 详情来我的下载资源里看

    iphone7维修原理图PCB位置图(PDF格式)

    例如,在iPhone 7中,处理器(A10 Fusion芯片)如何处理数据,电池管理如何确保高效且安全的供电,以及音频和视频处理单元如何实现高质量的媒体体验,这些都能在原理图中找到答案。 在维修过程中,理解这些原理图...

Global site tag (gtag.js) - Google Analytics