因为美工设计的NavigationBar两侧是没有空隙的,于是就发现了这个问题,怎么设置NavigationBar两边的距离。然后到code4App上,看了一下所有关于NavigationBar的demo左右两边都是有空隙的。说明这个不是简单地通过设置UINavigationItem上的UIButton的frame来实现的,(是的,我试过将UIButton的frame的x设置为负数,这个在Android的界面适配中可以常用到的,比如设置RadioButton的按钮和文字之间的距离)。最后求助Google,解决起来还是很简单的。和我想的有点像,具体如下
//***取消navigationBar左右得空隙*** //1.得到UINavigationBar的frame数据 CGRect frame = navigationBar.frame; //2.修改origin.x,使UINavigationBar整体向左移动10个像素 frame.origin.x = -10; //3.拉伸UINavigationBar20个像素(先补回左移的10个像素,再向右移动10个像素) frame.size = CGSizeMake(320+20, 44); navigationBar.frame = frame;
效果图:
未单击状态
单击状态,可以看到左边的空隙没有了
O啦~~~
转帖请保留出处:http://blog.csdn.net/u011638883/article/details/12837117
谢谢!!
SWFUpload是一个客户端文件上传工具,最初由Vinterwebb.se开发,它通过整合Flash与JavaScript技术为WEB开发者提供了一个具有丰富功能继而超越传统<input type="file" />标签的文件上传模式。
SWFUpload的主要特点
* 可以同时上传多个文件;
* 类似AJAX的无刷新上传;
* 可以显示上传进度;
* 良好的浏览器兼容性;
* 兼容其他JavaScript库 (例如:jQuery, Prototype等);
* 支持Flash 8和Flash 9;
SWFUpload不同于其他基于Flash构建的上传工具,它有着优雅的代码设计,开发者可以利用XHTML、CSS和JavaScript来随心所欲的定制它在浏览器下的外观;它还提供了一组简明的JavaScript事件,借助它们开发者可以方便的在文件上传过程中更新页面内容来营造各种动态效果。
在使用SWFUpload之前,请确认你具备一定的JavaScript和DOM知识。在实际开发中,大部分的错误都是由于错误的设置和低劣的Event Handlers处理程序所造成的。
SWFUpload的初始化与配置
首先,在页面中引用SWFUpload.js ,如
<script type="text/javascript" src="http://www.swfupload.org/swfupload.js"></script>
然后,初始化SWFUpload ,如
var swfu;
window.onload = function () {
swfu = new SWFUpload({
upload_url : "http://www.swfupload.org/upload.php",
flash_url : "http://www.swfupload.org/swfupload_f9.swf", file_size_limit : "20480"
});
};
以下是一个标准的SWFUpload初始化设置所需的参数,你可以根据需要自己进行删减:
{
upload_url : "http://www.swfupload.org/upload.php", 处理上传请求的服务器端脚本URL
file_post_name : "Filedata", 是POST过去的$_FILES的数组名
post_params : {
"post_param_name_1" : "post_param_value_1",
"post_param_name_2" : "post_param_value_2",
"post_param_name_n" : "post_param_value_n"
},
file_types : "*.jpg;*.gif", 允许上传的文件类型
file_types_description: "Web Image Files", 文件类型描述
file_size_limit : "1024", 上传文件体积上限,单位MB
file_upload_limit : 10, 限定用户一次性最多上传多少个文件,在上传过程中,该数字会累加,如果设置为“0”,则表示没有限制
file_queue_limit : 2, 上传队列数量限制,该项通常不需设置,会根据file_upload_limit自动赋值
flash_url : "http://www.swfupload.org/swfupload_f9.swf", Flash控件的URL
flash_width : "1px",
flash_height : "1px",
flash_color : "#FFFFFF",
debug : false, 是否显示调试信息
swfupload_loaded_handler : swfupload_loaded_function, 当Flash控件成功加载后触发的事件处理函数
file_dialog_start_handler : file_dialog_start_function, 当文件选取对话框弹出前出发的事件处理函数
file_queued_handler : file_queued_function,
file_queue_error_handler : file_queue_error_function,
file_dialog_complete_handler : file_dialog_complete_function, 当文件选取对话框关闭后触发的事件处理函数
upload_start_handler : upload_start_function, 开始上传文件前触发的事件处理函数
upload_progress_handler : upload_progress_function,
upload_error_handler : upload_error_function,
upload_success_handler : upload_success_function, 文件上传成功后触发的事件处理函数
upload_complete_handler : upload_complete_function,
debug_handler : debug_function,
custom_settings : { 自定义设置
custom_setting_1 : "custom_setting_value_1",
custom_setting_2 : "custom_setting_value_2",
custom_setting_n : "custom_setting_value_n",
}
}
SWFUpload中的File Object
在SWFUpload的使用过程中,无论在客户端还是服务器端都要和File Object打交道,在一个File Object中包含了以下内容:
{
id : string, // SWFUpload file id, used for starting or cancelling and upload
index : number, // The index of this file for use in getFile(i)
name : string, // The file name. The path is not included.
size : number, // The file size in bytes
type : string, // The file type as reported by the client operating system
creationdate : Date, // The date the file was created
modificationdate : Date, // The date the file was last modified
filestatus : number, // The file's current status. Use SWFUpload.FILE_STATUS to interpret the value.
}
SWFUpload中的方法
+ setPostParams (param_object)
- 描述
动态修改SWFUpload初始化设置中的post_params属性,其中所有的值都将被覆盖。
- 参数
param_object:一个simple JavaScript object,所有的name/value都必须是字符串,例如(this.setPostParams({ "Mari": name });)。
- 返回
void
SWFUpload中的事件
SWFUpload在运行过程中提供了多种事件,这些事件可以让开发者借助句柄来改变页面UI、改变行为,或者报告错误。所有这些事件都可以在一个SWFUpload实体中被调用,这意味着在这些事件对应的函数中,你可以用this 关键字来代替引用SWFUpload实体。
+ fileDialogComplete (number of files selected)
- 触发条件
1. 用户选择好了要上传文件,并关闭对话框;
2. 用户什么也没选,并取消对话框;
如果你希望在用户选择完文件后自动开始上传操作,那么可以将 this.startUpload() 操作放在这里。
- 传入参数
number of files selected:将返回用户所选取的文件个数。
+ uploadStart (file object)
- 触发条件
该事件在文件上传之前触发,它用于完成一些准备工作,比如传递参数;负责响应该事件的句柄函数可以有2个返回值(true 或 false)当返回值为false时,整个上传将被取消;当返回值为true时上传过程继续进行。而如果返回值为false,则通常是由一个uploadError事件所导致的。
注:官方帮助文档的原文中对该事件的描述中有这样一句:“If you return 'true' or do not return any value then the upload proceeds.”,从中可以看到既定的设计是当不返回任何值的时候应该等同于返回true,但是笔者在开发中发现必须明确返回值,否则上传进程将停止响应,不知是否是一个bug呢?
- 传入参数
file object:文件对象
+ uploadComplete (file object)
- 触发条件
在完成一个上传周期后(在uploadError 或 uploadSuccess之后),此时一个上传操作已经结束,另一个上传操作可以开始了。
- 传入参数
file object:文件对象
+ uploadProgress (file object, bytes complete, total bytes)
- 触发条件
该事件在整个文件的上传过程中定期性的被Flash控件自动触发,用以帮助开发者实时更新页面UI来制作上传进度条。
注意:该事件在Linux版本的Flash Player中存在问题,目前还无法解决。
- 传入参数
file object:文件对象
bytes complete:已经上传完毕的文件字节数
total bytes:文件总体积的字节数
常见错误
■ 所上传的文件体积并未超出SWFUpload所设置的数值,但为何无法成功上传?
□ 通常这是由于服务器端的限制所造成的,以Apache+PHP为例,请修改php.ini中的post_max_size与upload_max_filesize两项设置。
■ 在带有Session验证的网站后台中SWFUpload无法正常工作?
□ 这是因为SWFUpload在上传时相当于重新开辟了一个新的Session进程,因此无法与原有程序的Session保持一致,这就需要在上传时传递原有程序的SessionID,根据它来“找回”其应有的Session。
■ 关于swfupload上传中文文件名乱码的问题
□ 实际上是由于编码的问题造成的,程序使用的utf-8,文件名传递时也是这种编码,因此造成乱码或文件不能保存,仅是需要修改接收文件,以PHP为例,upload.php中
$file_name = $_FILES[$upload_name]['name'];
$file_name=iconv("UTF-8","GB2312",$file_name);
这样即可解决。
第八章 基本纹理贴图
学习如何加载纹理对象以及如何使用纹理坐标把图像贴图到几何图形的顶点。还学习对纹理图像进行过滤以及与几何图形颜色值进行混合的不同方法,并学习如何使用mip贴图来提高性能和改善视觉精度。讨论如何管理多个纹理以及如何在它们之间进行快速和方便的切换,并告诉OpenGL在可以使用高性能的纹理内存时哪个纹理具有更高的优先级。
a) 加载纹理 通过glTextImage根函数加载一维、二维和三维纹理贴图,所加载的纹理数据将经历和前一章所描述的像素和图像处理管线相同的过程。将纹理贴图到几何图形,需要为每个顶点指定一个纹理坐标(texture coordinate)。一般情况下,纹理坐标被指定为浮点数,范围从0.0到1.0,用s,t,r和q。q是缩放因子。函数:void glTexCoord3f(GLfloat s, GLfloat t, GLfloat r);
b) 纹理环境 通过glTexEnv函数把来自纹理单元的颜色与底层几何颜色进行组合。通过纹理环境模式来控制,包括GL_MODULATE调整、GL_REPLACE替换、GL_DECAL贴花、GL_BLEND混合、GL_ADD添加。
c) 纹理参数 在应用纹理贴图时,有许多参数可以影响纹理贴图的渲染规则和行为。纹理参数都是通过glTexParameter函数的各种变型进行设置的。基本过滤,通过一个拉伸或收缩的纹理贴图计算颜色片段的过程就是纹理过滤,有放大缩小过滤器,最邻近过滤和线性过滤。
d) Mip贴图是一种功能强大的纹理技巧,它不仅可以提高渲染性能,而且可以改善场景的显示质量。使用标准纹理贴图处理两个常见的问题,从而实现以上目标。第一个问题是闪烁(scintillation)的效果,第二个问题更多地和性能有关,但它的原因和闪烁相同。问题根源在于它加载了大量的纹理内存并对它们进行了过滤处理,但屏幕上实际显示的只是很少的一部分片段。解决办法就是用mip贴图,把一系列从最大到最小的图像加载到单个“mip贴图”纹理状态。然后,OpenGL使用一组新的过滤模式,为一个特定的几何图形选择具有最佳过滤效果的纹理。
第九章 高级纹理贴图
学习如何通过纹理压缩以及几何图形纹理坐标的自动生成改善纹理过滤的质量,获得更佳的性能和内存效率。还学习如何使用球体贴图实现效果良好的环境贴图,并使用立方图纹理获得更为逼真和精确的反射效果。还有讲述多重纹理和纹理组合器。
a) 辅助颜色 把纹理应用到几何图形时,由于光照的工作方式,常常会导致一种隐蔽的、不尽人意的副作用,是在纹理贴图之后再应用到镜面亮点,称为辅助镜面颜色。函数如下:glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR);
b) 纹理压缩 用较小的内存中加载更多的纹理,从而显著地改善纹理处理的性能,这是由于在纹理过滤是减少了纹理交换并使用了更少的内存。压缩纹理,使用glGetTexLevelParameteriv函数(以GL_TEXTURE_COMPRESSED为参数)判断这个纹理是否被成功压缩。加载压缩纹理,用glGetCompressedTexImage函数提取经过压缩的数据并把它保存到磁盘中。
c) 纹理坐标生成 使用glEnable函数,在S、T、R和Q纹理坐标上启用纹理坐标生成。可以用glTexGenf()函数设置用于纹理坐标生成的函数或方法。物体线性贴图,纹理生成模式为GL_OBJECT_LINEAR;视觉线性贴图,纹理生成模式为GL_EYE_LINEAR;球体贴图,纹理生成模式为GL_SPHERE_MAP;立方体贴图,纹理生成模式为GL_REFLECTION_MAP和GL_NORMAL_MAP;
d) 多重纹理,OpenGL硬件实现支持在几何图形上同时应用两个或更多的纹理。多重纹理坐标,使用glMultiTexCoord3f()等函数。纹理组合器允许我们对多重纹理片段的混合方式施加相同的控制,纹理组合器增加了一种新的纹理环境GL_COMBINE,调用函数glTexEnv来控制纹理组合器。