可不可以在iphone如何连接电脑上下载一个cf再移到电脑上

当前位置: &
& 创建一个iPhone应用程序
[] [] [] []创建一个iPhone应用程序
责任编辑:作者:转自cocoachina&&
  【IT168 技术文档】  创建一个iPhone应用程序  在高级开发人员开来,开发一个iPhone应用程序比开发一个Mac OS X应用程序的过程简单。因为他们使用了共同的开发工具,基于相似的基础类库。其实无论相似与否,他们之间总有一些区别。一个iPhone不是一台;他拥有不同的用处和不一样的设计需求。那些需求需要利用iPhone OS中的一些强项,并且要放弃一些对于移动平台不合理,不切实际的功能。由于iPhone和iPod touch比较微小的原因,这意味着你的要让用户始终关注那些他们真正需要的信息。  iPhone OS提供了iPhone和iPod touch相对于桌面应用程序没有的用户交互体验。多点触碰接口这个革命性的新技术,他可以将每一个独立的手指在屏幕上触摸或者做了多触点手指的活动或者复杂的属于行为传入到系统中。另外,嵌入在硬件中的加速,可以让你跟踪当前屏幕的定位并对你的内容做出调整。理解了这些新的技术如果在你的应用程序中工作,你就可以更集中的关注与设计一些新的有趣的东西给你的用户。  最好的方法让你去理解如何设计一个iPhone应用程序就是看一个小例子。这篇文章带你去看一个叫MoveMe的例子应用程序。这个例子的包含了一些典型的iPhone应用程序的行为,他包括:  Initializing the application  Displaying a window  Drawing custom content  Handling touch events  Performing animations  初始化应用程序  显示一个窗口  绘制自定义内容  触碰事件&  动画  图1,展现了应用程序的接口。触摸Welcome按钮将会触发一个动画让按钮自动在你手指离开的时候回到中间。当你在屏幕中拖动你的手指的时候,这个按钮会跟随你的手指。把你的手指从屏幕上移开的时候,这里触发了应外一个动画,这个按钮会马上回到你原来的位置。双击屏幕的其他位置,这个按钮上的语言会发生变化。  图 1 MoveMe应用程序的窗口)    查看MoveMe例子代码  下载MoveMe的例子提供了你创建应用程序所需的源代码和一些支持文件。你可以使用Xcode应用程序(位于 /Developer/Applications 文件夹下)来管理你的iPhone OS项目。每一个Xcode项目的窗口为集中你的代码和源文件提供了工作区,他建立了条例清晰的规则去管理你的源文件和整合你的应用程序,并为编辑调试你的代码提供了工具。  图2显示了MoveMe应用程序的窗口。打开下载的压缩包,放到你本地的磁盘,双击打开 MoveMe.xcodeproj这个文件。(你也可以使用Xcode菜单中的 File & Open and choosing the file来打开你的文件。)。项目中包含了一些Objective-C的源文件(那些以.m结尾的),一些图片文件和其他资源,还有一个预定的用来创建应用程序包的目标(MoveMe)。  图2 MoveMe项目窗口    在iPhone OS中,Xcode的最终目标是把你的应用程序二进制的文档和一些其他资源一起捆绑在应用程序中。程序包在iPhone OS系统中有一个比较清晰的目录,大多数文件都是位于目录的高层。然而,程序包有可能也会包含一些子文件目录用来本地的一些字符串或者是其他一些特别的资源。对于这篇文章来说你不需要知道确切应用程序包的组成,但是你可以在iPhone OS Programming Guide的 The Application Bundle里找到你感兴趣的一些东西。  创建MoveMe应用程序  要建立MoveMe应用程并在你的虚拟机中运行,你需要做如下一些步骤:  1.在Xcode中打开MoveMe.xcodeproj文件  2.在项目工具栏中确定虚拟操作在Active SDK菜单中选中如果Active SDK菜单没有出现在工具栏上,选择Project & Set Active SDK & Simulator.  3.从菜单中选择 Build & Build and Go (Run)或者只要简单在工具栏上点击Build and Go按钮。  当应用程序完成了编译,Xcode会把它加载到iPhone虚拟机上并运行。你可以使用你的点击Welcome按钮然後在屏幕的范围内拖动他。如果你为你的开发配置了一个真实的iPhone的话你可以把你的应用程序放到真实的机器上去运行。请参考[iPhone Development Guide]]中的Development Environment。  有关管理  iPhone OS是一个支持面向对象开发的系统,大多数的内存空间的分配都是靠Objective-C来完成的。在iPhone OS中运用了引用计数的方法来确定什么时候可以的删除对象。当你第一创建了一个对象,他的引用计数就变为了1。客户端接受这个对象并可以保持他知道当他不再需要的时候释放他。当一个对象的引用计数变为0以後,系统会自动回收这个对象的内存。  注意:iPhone OS中不支持垃圾回收的内存管理因为那是在Mac OS X v10.5或者以後的版本中才有的。  如果你想要为一个和对象不相关的东西分配一个内存空间,你可以使用标准的malloc内存分配类。如果你想用malloc分配其他的内存,你需要使用free命令来先释放一部分内存来用来存储新的对象。系统是不会释放基于malloc分配的内存空间的。  无论你怎么分配你的内存,对于iPhone OS来说管理好总的内存开销比在Mac OS X平台下要重要的多。尽管iPhone OS有虚拟内存系统,但是对于交互类型的文件来说就不好用了。这意味着有的代码段可以在只被使用的时候调用,但是你的应用程序数据必须全部放入到内存中。系统的监视器会监视所有的空馀的内存然後为你的应用程序需求开辟内存空间。如果内存满了,那么系统也许会自动关闭你的应用程序。事实上这个操作是最後的一招了,为了确保剩下的内存供应用程序使用一些临界的判断比如接受电话。  初始化MoveMe应用程序  对于每一个基于C的应用程序来说,iPhone应用程序初始化的切入点是一个叫main的函数。好消息是,当你在Xcode中用iPhone的模板创建一个新的项目的时候,你不需要自己写这个方法。这个模板包含了所有用于启动你的应用程序的方法。  列表1展示了MoveMe应用程序的main函数。这个main函数位于项目的main.m文件中。每一个应用程序中你创建的main函数应该都和这个差不多。这个函数有两个关键点。第一,他创建了应用程序最高级的自动释放池,他的作用是用来回收用 autorelease这个函数来创建的Objective-对象,第二,是一个叫做UIApplicationMain的函数用来创建MoveMe应用程序的关键对象,初始化对象和事件循环。这个应用程序在退出前不会从这个函数返回任何东西。  使用提供的main函数:  int main(int argc, char *argv[]){  NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];  int retVal = UIApplicationMain(argc, argv, nil, nil);  [pool release];  return retV  }&  创建应用程序代理对象  在一个项目中最重要的一个结构细节是定义了应用程序的代理对象,他是为你项目中类的一个实例。MoveMe应用程序的代理类是定义在了MoveMeAooDelegate.h这个文件中同时MoveMeAppDelegate.m是他的实现文件。你可以把这些对象添加到项目中使用Interface Builder去指定一个对象作为应用程序的代理。Interface builder是一个可视化的工具你可以用他来在窗口中创建排列视图,管理视图的层次,配置每一个视图的操作,并在视图和应用程序对象间建立连接。因为他是一个可视化的工作,你可以用鼠标在上面拖放控件来达到你想要的效果。你可以实时查看和修改你的界面。Interface Builder用一个nib文件来保存你的用户界面,他也是你引用程序对象的归档。  要运行Interface Builder查看应用程序代理对象是如何定义的,请双击MainWindows.xib文件(在 MoveMe & Resources文件夹下)在Xcode项目窗口的Groups & Files面板中。MainWindow.xib是一个包含了你的应用程序的主窗口和定义了一些重要对象关系的nib文件。要想了解应用程序代理关系是如何连接的,在nib文件窗口(标题是MainWindow.xib)中点击File's Owner图标,你可以在Inspectorwindow(选择 Tools & Inspector)中点击Inspector window'sApplication Connections选项卡。入图3,显示了File's Owner对象(那个在nib文件中显示为应用程序的对象)有一个名为MoveMeAppDelegate的代理对象插座。  图 3 应用程序代理    应用程序代理对象使用标准的UIApplication对象通知应用程序的改变。整个应用程序对象大部分并不复杂,但是代理只是通报下面的一些关键行为:  * 设置应用程序的窗口并初始化用户接口。  * 根据你自定义的数据引擎执行一些额外的初始化任务。  * 开放内容和自定义的通一资源。  * 汇报设备机器上的位置方向改变。  * 低内存控制  * 应用程序退出必须系统资源控制  在程序运行的时候,最受到触发的代理对象为用户创建应用程序窗口,在下面的&创建应用程序窗口&你回看到。这个对象会立即为你的用户创建应用程序做准备,比如恢复应用程序到前一个状态或者创建一个新的对象。当应用程序退出时,这个代理需要保存所有的信息和程序状态, 这样就可以给下一个程序使用  创建应用程序窗口  每一个应用程序都会创建一个填满整个屏幕的带有内容的窗口。图形应用程序和其他程序不是一个挨着一个运行的。事实上,在一些核心底层系统的守护进程运行後你的应用程序才开始运行。更多时候你的应用车工女婿永远不需要多于一个的基于UIWindow类的实例窗口。但你的应用程序需要改变界面的时候你只是改变了你的窗口的视图。  窗口提供了你的用户界面的绘图方法,但是视图对象才是提供正真的内容的对象。一个视图对象是UIView类的实例,他用来绘制许多内容并表现这些内容间的相互影响关系。iPhone OS定义了许多标准的控件去显示比如:表格,按钮,文本,还有其他一些交互控件。你可以把他们中的任何一个添加到你的窗口中去,或者你可以自定义基于 UIView的子类的视图实现一些自定的绘图和事件控制代码。MoveMe应用程序定义了两个视图一个是MoveMeView类一个是 PlacardView类,他们用来显示应用程序的接口还有控制用户的交互。  在开始程序的时候,目标是去创建应用程序窗口并快速的显示一些初始化的内容在屏幕上。当应用程序刚刚启动并准备开始事件的时候UIApplication对象会向代理对象发送applicationDid Finish- Launching这个消息,窗口并没有从MainWindow.xib文件中解压出来。这个消息是代理对象用来把内容放置在窗口中并初始化应用程序所需的一些其他对象。  在MoveMe应用程序中代理对象的applicationDidFinishLaunching方法如下所示:  1.它创建了一个视图控制对象用来管理窗口视图对象的内容。  2.视图控制对象初始化了MoveMeView类的一个实例它是一个保存在MoveMeView.xib的nib文件中的用来填满背景区的视图。  3.它添加了控制器视图作为窗口的子视图  4.显示窗口  列表2向我们展示了定义在MoveMe应用程序代理实现文件MoveMeAppDelegate.m中的 application DidFinishLaunching方法。这个方法创建了主视图窗口并把他们显示出来。显示了应用程序的窗口用来告诉系统你的应用程序已经准备好了控制事件。  - (void)applicationDidFinishLaunching:(UIApplication *)application{  // Set up the view controller  UIViewController *aViewController = [[UIViewController alloc]  initWithNibName:@&MoveMeView& bundle:[NSBundle mainBundle]];  self.viewController = aViewC [aViewController release];  // Add the view controller's view as a subview of the window  UIView *controllersView = [viewController view];  [window addSubview:controllersView];  [window makeKeyAndVisible];  }&  注意:你可以使用applicationDidFinishLaunching这个函数去实现其他任务当你的应用程序在 设置用户图形接口的时候。许多应用程序使用方法来初始化一些必须的数据,读取一些用户配置,返回最後一次退出前的应用程序设置。  虽然你可以看见代码中创建了窗口的背景并显示了窗口,你没有看见的是PlacardView类在屏幕上了绘制了 Welcome按钮。当MoveMeView从nib文件中释放出来的时候,initWithCoder函数初始化了MoveMeView类中的 setUpPlacardView方法。setUpPlacardView在列表3中显示了出来。一部分视图的初始化包含了创建PlacardView对象的方法。因为MoveMeView类为整个应用程序提供了背景。并把PlacardView对象添加为子视图。他们之间的关系不仅仅是因为欢迎按扭显示在了程序的顶层,而且它也允许了MoveMeView类来操纵这个按钮的一些事件。  创建placard视图:  - (void)setUpPlacardView{  // Create the placard view -- it calculates its own frame based on its image  PlacardView *aPlacardView = [[PlacardView alloc] init];  self.placardView = aPlacardV  [aPlacardView release];  placardView.center = self.  [self addSubview:placardView];  }    绘制欢迎按钮  这个由UIKit提供的标准视图可以在不编辑的情况下绘制出各种类型的内容。举个例子,你可以使用 UIImageView类去显示一副图片并且你可以使用UILabel类去显示一个文本字符串。在应用程序MoveMe的MoveMeView类中使用了 UIViewbackgroundColor类的基本属性来创建了一个春色的背景区域用来填满窗口。这个属性可以在视图的initialization方法中设置。在本例中,当MoveMeVIew从MoveMeView.xib对象中创建的时候在Interface Builder的Inspector面板中的Attributes选项卡中设置了它的颜色。当你需要动态的创建内容的时候,你需要使用UIKit或者 Quartz或者OpenGL ES中的一些高级方法来绘制。  在MoveMe应用程序中的PlacardView类在屏幕上绘制了欢迎按钮并管理它在屏幕中的位置。虽然 PlacardView类可是用UIImageView和UILable,但是在程序中还是用了详细的绘制过程来展现内部的全部过程。最後再用 drawRect这个方法绘制在视图区域中。  在执行drawRect这个方法的时候,绘图环境已经被配置准备好了。你要做的就是调用绘图命令把你要展现的东西绘制在屏幕上。在PlacardView类中,内容包含了一张背景图保存在Resoure文件夹里名字叫Placard.png并且自定义了一个动态的文本。绘制内容,类做了以下的步骤:  1.首先绘制出背景图因为视图总是会适应这个图片,这一步是为按钮提供了背景。  2.计算欢迎字符的位置,把它保持在按钮中心。因为字符串的大小是可以变的,所以位置也必须根据每次的大小来重新定位。  3.设置绘图颜色为黑色。  4.在背景中画出字符串,并把它稍微往下移一点。  5.设置绘图颜色为白色。  6.再画一次字符。  列表4展示了PlacardView类的drawRect方法。placardImage的成员变量中包含了 UIImage对象用于按钮的背景和currentDisplayString的成员变量是一个包含了欢迎的NSString对象。在画完图片後,这个方法计算了字符串在视图中的位置。这个字符串的大小已经在textSize变量中定义了。这个字符串被画了两次一次是黑色一次是白色使用了NSString 中的drawAtPoint这个方法。  列表4 绘制欢迎按钮:  - (void)drawRect:(CGRect)rect{  // Draw the placard at 0, 0  [placardImage drawAtPoint:(CGPointMake(0.0, 0.0))];  /*  Draw the current display string.  This could be done using a UILabel, but this serves to illustrate  the UIKit extensions to NSString. The text is drawn center of the  view twice - first slightly offset in black, then in white -- to give  an embossed appearance. The size of the font and text are calculated  in setupNextDisplayString.  */  // Find point at which to draw the string so it will be in the center of the view  CGFloat x = self.bounds.size.width/2 - textSize.width/2;  CGFloat y = self.bounds.size.height/2 - textSize.height/2;  CGP  // Get the font of the appropriate size  UIFont *font = [UIFont systemFontOfSize:fontSize];  [[UIColor blackColor] set];  point = CGPointMake(x, y + 0.5);  [currentDisplayString drawAtPoint:point  forWidth:(self.bounds.size.width-STRING_INDENT)  withFont:font  fontSize:fontSize  lineBreakMode:UILineBreakModeMiddleTruncation  baselineAdjustment:UIBaselineAdjustmentAlignBaselines];  [[UIColor whiteColor] set];  point = CGPointMake(x, y);  [currentDisplayString drawAtPoint:point  forWidth:(self.bounds.size.width-STRING_INDENT)  withFont:font  fontSize:fontSize  lineBreakMode:UILineBreakModeMiddleTruncation  baselineAdjustment:UIBaselineAdjustmentAlignBaselines];  }  当你需要位置一个比图片或者字符串更复杂的内容的时候你可以使用Quartz或者Open GL ES。Quartz是基于UIKit来实现绘制向量,图片,pdf还有其他一些你需要动态创建的复杂的内容。因为Quartz和UIKit是基于同一个绘图环境的,你可以直接在你的视图的drawRect函数中呼叫Quartz的方法,或者调用和给他相同的UIKit类的方法。  OpenGL ES是你除了Quartz和UIKit外用于显示2d或者3D内容的引擎,它使用了和Mac OS X平台下的OPGL很类似的一些函数但不完全相同。不像Quartz和UIKit,你不用使用drawRect这个方法来绘制你的界面。你仍然需要一个视图,但是你会发现视图对象为你的OpenGL ES对象提供了画图区域。你需要更新多少次画图区域,你需要多少对象都是由你决定的。  控制触摸事件  iPhone OS中的多点触摸接口可以让你的应用程序识别和响应多个手指的触摸事件。他可以让你的系统反馈多手指的操作事件,和从前单一手指,基于鼠标事件的不一样。对于每一根手指触碰到了设备,系统的传感就会触发一个触碰事件。当每一根手指移动的时候,触摸事件就会汇报这个新的位置坐标。如果某个手指失去了设备的链接,那么系统就是通告给哪个触碰事件来通知用户。  因为有可能有的时候会有多个手指同时触摸设备,系统可以让你使用那些事件用来创建复杂的用户操作。系统为你提供了一些手势的检测,比如点击,但是你需要自己去检测更复杂的手势行为。当事件系统启动了一个新的事件的时候,他包含了当前每一个手指的信息用来判断他是触摸还是移开了屏幕。因为每一个事件对象包含了有关的主动触摸,你可以为每一个手指分配新的事件。你可以更具应用程序的内容跟踪每根手指的移动。举个例子,如果你的两根手指做除了捏放的动作 如图4那么他下面的视图也会跟着缩放,你可以使用这些事件来改变当前缩放等级。  图 4 使用触摸事件来检测手势  系统把事件转化为应用程序responder对象,他是一个UIResponder类的实例。在iPhone 应用程序中,在iPhone应用程序中,你的应用程序视图大部分来接受你自定义的responder对象。MoveMe应用程序包括两个视图类,但是只有 MoveMeView类拥有事件管理。这个类通过重载 UIResponder以下几个方法来检测欢迎按钮内外的触击动作:  - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)  - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)  - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)  在MoveMe这个应用程序中,他只是简单的跟踪第一次点击到屏幕上欢迎按钮手指的信息。他使用了UIView类的支持,默认这个类是不接受多点触摸的。对于这个应用程序来说不用多点触摸事件就可以很方便的建立起来了。当你禁用了多点触摸技术後,系统只会接受第一根手指触摸的信息。这种情况下手指的其他信息就不会传入到视图中,如果你想要拥有更多的触点信息,你可以用UIView类中的 setMultipleTouchEnabled重新激活多点触摸支持。  下面是MoveMeView类中的一些事件控制行为:  1.当触摸事件发生的时候,系统首先检测事件从那里发出的。在欢迎按钮外双击可以改变按钮上的字体。单击按钮他会伴随着动画放大的效果定位到你手指的中心。其他点击事件都会被忽略。  2.如果手指按在按钮上,移动的话这个按钮的位置将会随着手指的移动而移动。  3.如果手指从按钮上释放的话,哪按钮就会以动画的形式移动到他最初的位置。  列表显示了MoveMeView中的touchesBegan:withEvent函数。系统将会在手指第一次触碰到设备的时候调用。这个方法从所有的触摸事件中选择唯一的一个触摸对象。在UITouch对象中的信息记录了那个视图发生了点击事件是 MoveMeView还是PlacardView对象和这个视图对象点击了多少次。如果这个是在按钮外点击了两次的话,touchesBegan:withEvent这个函数调用 setupNextDisplayString这个方法来改变按钮上的欢迎字符串。如果事件是在欢迎按钮上被捕获的话,他将调用 animateFirstTouchAtPoint方法移动按钮到你手指点击的位置。并且其他所以的触碰对象都被忽略。  表初始化触摸事件:  - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event  {  // We only support single touches, so anyObject  // retrieves just that touch from touches  UITouch *touch = [touches anyObject];  // Only move the placard view if the touch was in the placard view  if ([touch view] != placardView)  {  // In case of a double tap outside the placard view,  // update the placard's display string  if ([touch tapCount] == 2)  {  [placardView setupNextDisplayString];  }    }  // Animate the first touch  CGPoint touchPoint = [touch locationInView:self];  [self animateFirstTouchAtPoint:touchPoint];  }  列表 6展示了MoveMeView类的 touchesMoved:withEvent方法。系统将会调用这个方法然後在区域内移动你的按钮。MoveMe应用程序只会响应和跟踪欢迎按钮。最後这个方法检查事件的位置并把PlacardView定位在中心。视图的运动是因为按钮在新的位置自动重画了一遍。  列表 6 根据触摸点响应移动:  - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event  {  UITouch *touch = [touches anyObject];  // If the touch was in the placardView, move the placardView  // to its location  if ([touch view] == placardView)  {  CGPoint location = [touch locationInView:self];  placardView.center =    }  }  当用户的手指从屏幕中离开的时候MoveMe应用程序会启动动画效果把按钮又重新移回到应用程序的中心。图7显示了touchesEnded函数用来初始化动画。  表 7 在欢迎按钮上释放事件:  - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event  {  UITouch *touch = [touches anyObject];  // If the touch was in the placardView, bounce it back to the center  if ([touch view] == placardView)  {  // Disable user interaction so subsequent touches  // don't interfere with animation  self.userInteractionEnabled = NO;  [self animatePlacardViewToCenter];    }  }  让我们来简化一下事件控制流的过程,touchesEnded函数控制视图的触摸事件让按钮动画移动到他原来的中心位置的时候失效。如果不这样去设计那么每一个事件控制方法就需要添加判断按钮是否在动画移动中,如果是就取消动画这样的逻辑。暂时的使得事件控制失效是为了让按钮回到屏幕的中心,这样就省略了一些其他的逻辑判断。当他又一次回到了最初的原点的时候,由MoveMeView类发出的 animationDidStop就会触发,这时用户交互事件又开始了新的循环。  按钮移动动画  在Iphone应用程序中,动画占了很重要的角色。动画拓展了用户在内容上的理解和前後过程的衔接。举个例子,当用户在处理一个分层的数据应用程序的时候,带有移动的动画比直接在一个屏幕一个屏幕的直接切换来的好看。这个动画向用户展示了他的向上或向下操作,同时可以让用户看来又新的信息需要去关注。  UIKit类为重要的动画效果提供了支持。在MoveMe应用程序中欢迎按钮使用了不同效果的动画。当用户把手移动到按钮上的时候,应用程序会触发把按钮方法的方法。当用户的手指离开了按钮的时候,另外一个恢复动画会把按钮移回到屏幕中心。一些创建动画的基础手法是差不多的。  1.在视图中调用beginAnimations开始你的想要执行动画的对象。  2.配置动画的参数  3.呼叫视图类的commitAnimations方法开始动画。  列表 8展示了当用手第一次点击了欢迎按钮的时候的动画代码。这个方法将会用动画的形式缩放这个按钮并设置他新的尺寸。当这个动画完成後,动画代理对象会呼叫growAnimationDidStopz这个函数,然後把placard视图重新移动到手指点击的地方去。  列表 8 欢迎按钮的动画:  - (void)animateFirstTouchAtPoint:(CGPoint)touchPoint  {  #define GROW_ANIMATION_DURATION_SECONDS 0.15  NSValue *touchPointValue = [[NSValue valueWithCGPoint:touchPoint] retain];  [UIView beginAnimations:nil context:touchPointValue];  [UIView setAnimationDuration:GROW_ANIMATION_DURATION_SECONDS];  [UIView setAnimationDelegate:self];  [UIView setAnimationDidStopSelector: @selector(growAnimationDidStop:finished:context:)];  CGAffineTransform transform = CGAffineTransformMakeScale(1.2, 1.2);  placardView.transform =  [UIView commitAnimations];  }  - (void)growAnimationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context  {  #define MOVE_ANIMATION_DURATION_SECONDS 0.15  [UIView beginAnimations:nil context:NULL];  [UIView setAnimationDuration:MOVE_ANIMATION_DURATION_SECONDS];  placardView.transform = CGAffineTransformMakeScale(1.1, 1.1);  // Move the placard view under the touch  NSValue *touchPointValue = (NSValue *)  placardView.center = [touchPointValue CGPointValue];  [touchPointValue release];  [UIView commitAnimations];  }  完成应用程序  在前面几章中,你看见了MoveMe应用程序是怎么样初始化,显示她的用户接口,通报她的事件的。除了把图形显示在应用程序上之外还有一些小的细节需要在发布到真实设备上时考虑一下。其中一个就是有关你引用程序的属性列表Info.plist文件。他是一个记录了有关你应用程序的基本信息。Xcode 创建了默认版本的文件信息嵌入到你的初始化信息配置中。你可以拓展这些信息,事实上,我们需要为系统提供一些他想要知道的应用程序的信息。举个例子,你将用这个文件去配置你的应用程序的版本,自定义的支持链接,图标,还有默认的状态,系统状态栏的风格等。  列表9显示了MoveMe应用程序的Info.plist内容。这个文件定义了在Home界面中的图标,和位于系统中唯一的名称。因为MoveMe应用程序是全屏的应用程序。换句话说她不会显示系统的状态栏目,并把UIStatusBarHidden设置为 true。把这个属性的值设置为true是为了让系统知道,无论在开始还是在程序中都不要显示系统的状态条。虽然你可以在MoveMe应用程序中配置相同的属性,但是他在应用程序开始运行时完全不会有效果,这样看起来很怪。  表 9 Info.plist的具体内容:     &/DTDs/PropertyList-1.0.dtd&&    CFBundleDevelopmentRegion  en  CFBundleDisplayName  ${PRODUCT_NAME}  CFBundleExecutable  ${EXECUTABLE_NAME}  CFBundleIconFile  Icon.png  CFBundleIdentifier  com.yourcompany.${PRODUCT_NAME:identifier}  CFBundleInfoDictionaryVersion  6.0  CFBundleName  ${PRODUCT_NAME}  CFBundlePackageType  APPL  CFBundleSignature  ????  CFBundleVersion  2.6  UIStatusBarHidden  LSRequiresIPhoneOS    NSMainNibFile  MainWindow &&& 注意:你可以使用文本编辑器来编辑你的的应用程序Info.plist,他将会显示一个和上面内容相同的XML内容,或者是属性列表编辑器,他在列表中显示了一些关键的属性。Xcode同样为这些属性提供了信息面板。要打开这个窗口,选择你的目标应用程序在 Targets group中并选择File & Get Info。这个列表包含了大多数(但不是全部)Info.plit的信息。  在这里,你已经知道了全部的开发你自己的iPhone应用程序的信息,下一步你将要学会利用这些信息去创建你的iPone应用程序。你应该学会更好的利用iPhone OS的工具来创建你的有趣的交互应用程序。在&讨论你的应用程的未来&中你可以找到更多方法,但是有关完整的列表,和一些比如如何使用他们的信息,你可以查看iPhone OS开发指南。  有关你应用程序的更多信息  在iPhone和iPodtouch总还有许多特性,一些是硬件的特性,比如自动根据设备的方位调整视图。其他是一些软件的特性,比如所有的内嵌的iPhone应用程序都共享一个表的内容。因为许多的特性是基于用户体验的,你可以在初始化设计的时候看见他们是否有可能适用于你的应用程序。  使用加速器跟踪位置和运动  在iPhone和iPod touch中的加速器为你的应用程序提供了很多有用的信息。一个加速器会试图改变一个轴上的速度。iPhone和iPod touch有三个加速器,他们分别用来感应三个轴的加速度,让你可以用来检测到他们的变化。  图 5 加速器的坐标轴  &&&&&&& 也许你不认为测量加速度的变化比较重要,但是有了这些信息你就可以做许多有趣的东西。我们知道地心引力把一个对象吸引在地面上。这个加速度即使在设备关机的情况下都是存在的。跟踪这个加速度和她的范围,你就可以跟踪设备在一个立体空间中的定位。你可以把这个定位传输到你的应用程序中。  这个系统使用加速度来检测设备当前的定位来告诉你的应用程序屏幕是否旋转。如果你的应用程序同时支持横和竖两种显示模式那你在起先的时候就需要设计。UIViewController类提供了自动的判断设备是否改变显示模式的接口  如果想要获取原始的加速度你可以用UIKit中的UIAccelerometer对象。这个对象根据设置的间隔汇报当前的加速度。由此你可以发现设备的位置或者其他类型的瞬间的速度,比如用户来回的摇动设备。你可以在你的游戏中使用这些数据。  访问用户的内容  用户内容列表是一个很重要的资源,所有的系统中的应用程序都共享他。电话,邮件,短信程序包含了用户内容信息,来帮助用户进行一些基础的交互比如电话,邮件或者文字短信。你的应用程序可以访问这个列表去做相同的一些事情或者使用他其中的一些你应用程序需要的其他信息。  图 6 访问用户信息    iPhone操作系统不但提供了直接存储用户的录信息而且提供了间接的访问接口。使用直接的方式,你可以从通信录数据库中获得信息。你也许会根据你应用程序的要求来过滤这些信息并把结果显示在你的应用程序中。我想也许你不需要为通信录自定义接口,因为 iPhone操作系统为他提供了一些标准的读取和创建信息的接口。把这些接口融入到你的应用程序中需要一些努力但是这样你的应用程序看起来就会像是系统的一部分一样。  获取用户当前的位置  使用基于iPhone操作系统的用户一定会很繁忙。所以你的软件要尽可能的让事情井井有序取来。因特网和可以让你在各个地方工作变为了可能,如果收集的信息和用户而当前的位置有关的话这样的话用户就会完美的用户体验。为什么要列出那些纽约的咖啡馆给一个洛杉矶正在渴的人呢?这就是核心的本地架构可以帮助你的对方。  核心的定位框架从基站或者Wi-Fi热点得到定位信息来转换当前用户的位置。你可以使用这个框架去初始化用户位置,或者侦测到用花位置的改变。有了这些信息,你可以为你的应用程序提供设备的定位或者用来其他方面。  播放音频和视屏  iPhone操作系统可以通过核心音频还有OpenAL框架在你的应用程序中播放音乐,并使用媒体播放框架来支持视屏的回放功能。核心音频提供了一个高级的接口用来播放,记录和操作声音,并可以解析音频。你可以使用他来回放一个简单的音效或是多声道的音乐,混音并他们记录在音乐文件中,甚至触发iPhone中的震动功能。如果你是一个游戏开发者,在代码中使用了OpenAL那你也可以把它应用到iPhone中去播放你的声音。  媒体播放框架用来支持你播放全屏的文件。这个框架支持你用来播放许多种格式的视频文件,并显示了控制器用来回放,而且包括设置影片的长宽高比例。游戏开发人员可以用这个框架来播放分段的视频或者其他的内容,当你的应用程序是给予多媒体的播放你也可以使用这个框架去播放影片文件。  图 7 播放自定义的影片    &&&&&&& 用内置的摄像头捕获照片  在iPhone中的摄像头应用程序可以让用户拍摄照片并把他们保存一个统一的照片库中,尽管iPod touch没有摄像头,但他一样也有一个照片库。iPhone操作系统提供了UIKit框架下的UIImagePickerController 类来访问他们。  图 8 iPhone的摄像头    UIImagePickerController类为你的应用程序提供了摄像头和照片库的操作接口。这些标准的系统接口可以被包含了摄像头和照片的应用程序使用。当你需要访问这些接口的时候访问控制会很小心的处理用户的交互并为你的应用程序返回图片。
【内容导航】
本文欢迎转载,转载请注明:转载自IT168 [
本文链接:
技术开发最新文章&&
技术开发相关文章&&
技术开发热点关注
技术开发热评文章
装机必备软件
技术开发精彩专题
All Rights Reserved. 北京皓辰网域网络信息技术有限公司. 版权所有

我要回帖

更多关于 二手车过户费用 的文章

 

随机推荐