当前位置:  编程技术>移动开发
本页文章导读:
    ▪Xcode4.2开发入门之一些变更        Xcode4.2开发入门之一些变化     1. 工程项目模板类型的更改           Xcode4时代                                           Xcode4.2新模板Navigation-based Application  ------->Master-Detail Appl.........
    ▪ opengl es glsl shadow 地图ping        opengl es glsl shadow mapping http://blog.shayanjaved.com/2011/05/20/android-opengl-es-2-0-shadow-mapping/   http://processors.wiki.ti.com/index.php/Render_to_Texture_with_OpenGL_ES     ......
    ▪ apk资料的下载与安装       apk文件的下载与安装 public class DownloadActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.download).........

[1]Xcode4.2开发入门之一些变更
    来源: 互联网  发布时间: 2014-02-18
Xcode4.2开发入门之一些变化

 

 

1. 工程项目模板类型的更改

          Xcode4时代                                           Xcode4.2新模板
Navigation-based Application  ------->Master-Detail Application => iphone

Splite View-based Application ------->Master-Detail Application => ipad

OpenGL ES Application --------------->OpenGL Game

Tab Bar Application      --------------->Tabbed Application

Utility Application         --------------->Utility Application

View-based Application --------------->Single View Application

Window-based Application------------>Empty Application

 
2.  新增一编译级特性——Automatic Reference Counting
 这似乎是Xcode4.2也增加了类似其他面向对象语言的GC(垃圾回收器)的概念。不知道我的理解是否正确?但在实践中若是iphone应用编程或导入以前的工程项目最好还是禁用ARC,(我们自己勤快点养成释放清理对象的习惯。)方法为:Project Info -> Apple LLVM compiler 3.0 - Language -> Objective-C Automatic Referencing Counting, 设置为NO即可。

否则会对release,retainCount,retain等内存相关操作在编译时出现红色警告:
 

 

 

 3. 新增特性——Storyboard

Storyboard是Xcode4.2新增的又一个特性,它将原有工程中的所有xib文件集成在一起,用拖曳的方式建立ViewController相关之间的跳转关系,使得整个程序的UI跳转逻辑清楚明了。简单地说,storyboard引入了2个概念:

scene:一个场景,由一个viewController和相关的xib表示。

segue:(英文原意为继续、持续)。在这是用于连接scenes,其有多种类型,包括:Push,Modal,Popover and more。

当然segue也负责传递数据和返回数据。

整个程序的界面转换就是在各个scene之间切换。界面跳转关系,比如按哪个键跳到哪个界面,是由segue来描述。segue也可以带数据,以便做数据传递。(也因此被说是抄袭Adobe的Flash)。

要点:必须有一个viewController是作为storyboard的初始界面的,及需要勾选上Initial Scene项。如下图:

 

StoryBoard相对于以前的NIB/XIB的优势:

  • 能够减少很多与View相关的代码量。
  • 能够使View和Controller进一步解耦。
  • 能够优化程序的“页面流”,使程序的结构更清楚。

      通常,NIB是和ViewController相关联的,很多时候ViewController都有其对应的NIB文件。该文件的作用就是描述用户界面以及初始化对象和界面元素对象。虽然这些都可以在代码中来实现,但为了高效编写程序代码,xCode给我们提供了IB来绘制界面。而StoryBoard的引入,则是进一步加强了这方面的功能,之前的NIB文件没有办法描述ViewController之间的跳转过渡,只能通过代码中调用类似-presentModalViewController:animated:或-pushViewController:animated:这个两个方法来实现。现在,在StoryBoard中引入了Segue这一概念,由Segue定义从一个ViewController到另一个ViewController的过渡。只需要像之前连接界面对象和Action Method那样将ViewController之间用合适的Segue连接起来即可,无需任何手写代码。即使是自定义Segue,也只需编写Segue的实现,而无需编写调用的代码,一切都由StoryBoard帮我们调用。 

 要准确用好StoryBoard机制,必须严格遵守MVC原则。要让View和Controller充分解耦;并且不同的Controller之间也是充分解耦。所以AppDelegate就应该是处理UIApplication的回调,而不应该负责用户界面的处理。更不应该直接把AppDelegate当ViewController用,乃至直接在UIWindow上绘制界面。虽然,这有可能简单明了,毕竟UIWindow也是UIView的子类。但我们还是要有优良的习惯:由ViewController来负责处理View才是正确之道。从近期苹果针对xCode的项目模板的变化上看也反映这种优化趋势:

      在Xcode 4时,程序项目模板(如View-Based Application)开始鼓励使用UIWindow的rootViewController属性来指定第一屏的ViewController,以保证AppDelegate只专注于它应该做的事情。如今Xcode4.2引入StoryBoard后,AppDelegate就直接不管ViewController的事情了,第一屏使用的ViewController(即rootViewController)可以在StoryBoard中设置。

如何从NIB/XIB迁移到StoryBoard,有些什么改变?

  • ViewController不需要NIB/XIB文件,连接Outlet和Action的操作都可以在StoryBoard上完成。
  • 孤立View(独立于ViewController的View)是不能出现在StoryBoard里,所有View必须通过ViewController来管理。(这样,StoryBoard更像是Controller对象的容器,而不是View对象的容器,以前NIB/XIB倒显得可以视为View对象的容器)
  • ViewController之间的过渡代码不需要了,用StoryBoard的Segue直接可视化连接不同的ViewController。
  • UIWindow对象的作用被进一步淡化,在StoryBoard图上没有体现出AppDelegate对象——因为它本来就不应该来处理界面View的。
  • 代码编写要严格遵守MVC设计模式,才能用好StoryBoard来高效开发程序。

实践中的问题:
      XCode项目如果包含StoryBoard创建的,就无法在iOS 4.x的模拟器和iOS 4.x的真机上调试,运行,不报错,但是得到的结果只有黑屏。这应该是storyboard只有iOS5支持的原因吧。

 

4. UIGestureRecognizer使用更方便,居然可视化。
      在UIGestureRecognizers之前的时代,如果想要检测一个手势,如滑过(swipe),你不得不在UIView视图内对每个touch动作注册通知,如touchesBegan,touchesMoves,touchesEnded。程序员要编写相近的代码来检测各个touches动作,导致微妙的错误和应用程序之间的不一致。

      在iOS3.0,Apple开始引入新的UIGestureRecognizer类来补救。这些类提供检测诸如taps,pinches,rotations,swipes,pans和long presses等手势的默认实现,通过使用它们,再也不需要编写繁重的代码量,也能使程序正常运行。

使用UIGestureRecognizers非常简单,只有两步:

1. Create a gesture recognizer。需要指定一个回调方法使手势识别器当手势starts,changes,或ends时,能发送这些更新。

2. Add the gesture recognizer to a view。每个gesture recognizer都是唯一关联一个视图。当视图内部发生一个触摸(touch)时,手势识别器将寻找相匹配类型的触摸,找到匹配的就通知回调函数。 [self.view addGestureRecognizer:recognizer]; 

你可以编码方式执行这两步。不过现在StoryBoard Editor中可视化添加一个手势识别器非常容易。居然可以从Objects Library中拖放进来。

UIGestureRecognizer的衍生类別有以下几种:

  • UITapGestureRecognizer     点一下
  • UIPinchGestureRecognizer   二指往内或往外拨动
  • UIRotationGestureRecognizer  旋转
  • UISwipeGestureRecognizer     滑动,快速移动
  • UIPanGestureRecognizer       拖移,慢速移动
  • UILongPressGestureRecognizer  长按

這些手势別在使用上也很简单,只要在使用前定义并添加到对应的视图上即可(在StoryBoard可直接拖放到对应的视图上)。

 

 

 


    
[2] opengl es glsl shadow 地图ping
    来源: 互联网  发布时间: 2014-02-18
opengl es glsl shadow mapping

http://blog.shayanjaved.com/2011/05/20/android-opengl-es-2-0-shadow-mapping/

 

http://processors.wiki.ti.com/index.php/Render_to_Texture_with_OpenGL_ES

 

 


    
[3] apk资料的下载与安装
    来源: 互联网  发布时间: 2014-02-18
apk文件的下载与安装
public class DownloadActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.download);
openFile(downLoadFile("http://www.vnetmate.com/mobileapp/Upload/tools.apk"));
}

// 安装
private void openFile(File file) {
Log.e("OpenFile", file.getName());
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(android.content.Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file),
"application/vnd.android.package-archive");
startActivity(intent);
}

// 下载
protected File downLoadFile(String httpUrl) {
final String fileName = "updata.apk";
File tmpFile = new File("/sdcard/update");
if (!tmpFile.exists()) {
tmpFile.mkdir();
}
final File file = new File("/sdcard/update/" + fileName);

try {
URL url = new URL(/blog_article/httpUrl/index.html);
try {
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
InputStream is = conn.getInputStream();
FileOutputStream fos = new FileOutputStream(file);
byte[] buf = new byte[256];
conn.connect();
double count = 0;
if (conn.getResponseCode() >= 400) {
Toast.makeText(this, "连接超时", Toast.LENGTH_SHORT).show();
} else {
while (count <= 100) {
if (is != null) {
int numRead = is.read(buf);
if (numRead <= 0) {
break;
} else {
fos.write(buf, 0, numRead);
}

} else {
break;
}
}
}
conn.disconnect();
fos.close();
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block

e.printStackTrace();
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block

e.printStackTrace();
}

return file;
}

}

    
最新技术文章:
▪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