在5.0上有一个很方便的函数,但是在4.3上不能用。
下面这段代码对于4.3和5.0版本都可以。
先重写UINavigationBar的drawRect函数:
@implementation UINavigationBar (CustomImage)
- (void)drawRect:(CGRect)rect {
UIImage *image = [UIImage imageNamed: @"nav_back.png"];
[image drawInRect:CGRectMake(0, 0, 320, 44)];
}
@end
然后在实现代码中使用:-(void)addNavigationBarBackgroundImage{
if ([[UINavigationBarclass] respondsToSelector:@selector(appearance)]) {//如果是5.0以上版本
[self.navigationController.navigationBarsetBackgroundImage:[UIImageimageNamed:@"FirstTop_NavigationBar_Background.png"]
forBarMetrics:UIBarMetricsDefault];
}
self.title = @"主页";
}
猴子原创,欢迎转载。转载请注明: 转载自Cocos2D开发网--Cocos2Dev.com,谢谢!
原文地址: http://www.cocos2dev.com/?p=312
今天在家里的电脑,MonoDevelop编辑器中文乱码,本想着应该是偏好设置的字体没有设置成中文字体。修改Preferences的font之后,发现还是有乱码问题。
找了下原因,最终解决方法是:
1、在应用程序下找到Unity/MonoDevelop.app,右键显示包内容。找到/Contents/Frameworks/Mono.framework/Versions/2.10.2/etc/gtk-2.0 目录下的gtkrc文件。
用TextWrangler打开(其他文本编辑器也可以),
找到 font = "Lucida Grande 14"
在下面一行新添加 font_name = "Hei 14" ,保存。
2、启动 MonoDevelop ,打开 Preferences,修改成下面的设置:
以下部分内容来自互联网
在驱动程序里, ioctl() 函数传送的变量 cmd 是应用程序用于区别设备驱动程序请求处理内容的值。cmd除了可区别数字外,还包含有助于处理的几种相应信息。
ioctl()的cmd可以通过使用宏_IO()得到,那么cmd到底是怎么组成的呢?
cmd的大小为 32位,共分 4 个域:
bit31~bit30 2位为 “区别读写” 区,作用是区分是读取命令还是写入命令。bit29~bit15 14位为 "数据大小" 区,表示 ioctl() 中的 arg 变量传送的内存大小。
bit20~bit08 8位为 “魔数"(也称为"幻数")区,这个值用以与其它设备驱动程序的 ioctl 命令进行区别。
bit07~bit00 8位为 "区别序号" 区,是区分命令的命令顺序序号。
像命令码中的 “区分读写区” 里的值可能是 _IOC_NONE (0值)表示无数据传输,_IOC_READ (读), _IOC_WRITE (写) , _IOC_READ|_IOC_WRITE (双向)。
内核定义了 _IO() , _IOR() , IOW() 和 _IOWR() 这 4 个宏来辅助生成上面的 cmd 。下面分析 _IO() 的实现,其它的类似。
在 asm-generic/ioctl.h 里可以看到 _IO() 的定义:
#define _IO(type,nr) _IOC(_IOC_NONE,(type),(nr),0)
再看 _IOC() 的定义:
#define _IOC(dir,type,nr,size) \ (((dir) << _IOC_DIRSHIFT) | \ ((type) << _IOC_TYPESHIFT) | \ ((nr) << _IOC_NRSHIFT) | \ ((size) << _IOC_SIZESHIFT))可见,_IO() 的最后结果由 _IOC() 中的 4 个参数移位组合而成。
再看 _IOC_DIRSHIT 的定义:
#define _IOC_DIRSHIFT (_IOC_SIZESHIFT+_IOC_SIZEBITS)_IOC_SIZESHIFT 的定义:
#define _IOC_SIZESHIFT (_IOC_TYPESHIFT+_IOC_TYPEBITS)_IOC_TYPESHIF 的定义:
#define _IOC_TYPESHIFT (_IOC_NRSHIFT+_IOC_NRBITS)_IOC_NRSHIFT 的定义:
#define _IOC_NRSHIFT 0_IOC_NRBITS 的定义:
#define _IOC_NRBITS 8_IOC_TYPEBITS 的定义:
#define _IOC_TYPEBITS 8由上面的定义,往上推得到:
_IOC_TYPESHIFT = 8 _IOC_SIZESHIFT = 16 _IOC_DIRSHIFT = 30所以,(dir) << _IOC_DIRSHIFT) 表是 dir 往左移 30 位,即移到 bit31~bit30 两位上,得到方向(读写)的属性;
(size) << _IOC_SIZESHIFT) 位左移 16 位得到“数据大小”区;
(type) << _IOC_TYPESHIFT) 左移 8位得到"魔数区" ;
(nr) << _IOC_NRSHIFT) 左移 0 位( bit7~bit0) 。
这样,就得到了 _IO() 的宏值。
所以在应用程序中调用ioctl()一般是这样的:
#define I2C_IOCTL_CMD_MAKE(cmd) ( _IO( I2C_DRV_MAGICNUM, cmd) ) cmd = I2C_IOCTL_CMD_MAKE(I2C_CMD_WRITE); status = ioctl(hndl->fd, cmd, &prm);
在对应的驱动程序中在switch对cmd做出分类时有这样的调用:
#define I2C_IOCTL_CMD_GET(cmd) ( _IOC_NR(cmd) ) #define I2C_IOCTL_CMD_IS_VALID(cmd) ( (_IOC_TYPE(cmd) == I2C_DRV_MAGICNUM ) ? 1 : 0) if(!I2C_IOCTL_CMD_IS_VALID(cmd)) return -1; cmd = I2C_IOCTL_CMD_GET(cmd); switch(cmd) {}那么_IOC_NR()和_IOC_TYPE()又是什么东西,从形式上看应该是_IO()的逆操作
以上几个宏的使用格式为:
_IO (魔数, 基数);
_IOR (魔数, 基数, 变量型)
_IOW (魔数, 基数, 变量型)
_IOWR (魔数, 基数,变量型 )
魔数 (magic number)
魔数范围为 0~255 。通常,用英文字符 "A" ~ "Z" 或者 "a" ~ "z" 来表示。设备驱动程序从传递进来的命令获取魔数,然后与自身处理的魔数想比较,如果相同则处理,不同则不处理。魔数是拒绝误使用的初步辅助状态。设备驱动程序可以通过 _IOC_TYPE (cmd)
来获取魔数。不同的设备驱动程序最好设置不同的魔数,但并不是要求绝对,也是可以使用其他设备驱动程序已用过的魔数。
基(序列号)数
基数用于区别各种命令。通常,从 0开始递增,相同设备驱动程序上可以重复使用该值。例如,读取和写入命令中使用了相同的基数,设备驱动程序也能分辨出来,原因在于设备驱动程序区分命令时使用 switch ,且直接使用命令变量 cmd值。创建命令的宏生成的值由多个域组合而成,所以即使是相同的基数,也会判断为不同的命令。设备驱动程序想要从命令中获取该基数,就使用下面的宏:
_IOC_NR (cmd)
通常,switch 中的 case 值使用的是命令的本身。
变量型
变量型使用 arg 变量指定传送的数据大小,但是不直接代入输入,而是代入变量或者是变量的类型,原因是在使用宏创建命令,已经包含了 sizeof() 编译命令。