当前位置:  编程技术>移动开发
本页文章导读:
    ▪NSLog 施用        NSLog 使用 可能你曾经有过Windows编程的经验,通常在你调试程序的时候,如果希望看到某个中间结果,你会习惯使用MessageBox来显示中间的结果。有了Cocoa的NSLog,你在写Cocoa程序的时候,就.........
    ▪ MTK手机软件系统的索引结构        MTK手机软件系统的目录结构 MTK手机软件系统的主要目录如下所示,一些相对不重要的目录略去。. |-- Fast_DL |-- ROM |-- adaptation |-- applib |-- bootloader |-- config |-- custom | |-- app | | `-- TOP_6227.........
    ▪ Animation Types-Grouping Animations       Animation Types----Grouping Animations - (id)initWithFrame:(NSRect)frame { self = [super initWithFrame:frame]; if (self) { CGFloat xInset = 3.0f * (NSWidth(frame) / 8.0f); CGFloat yInset = 3.0f * (NSHeight(frame) / 8.0f); .........

[1]NSLog 施用
    来源: 互联网  发布时间: 2014-02-18
NSLog 使用
可能你曾经有过Windows编程的经验,通常在你调试程序的时候,如果希望看到某个中间结果,你会习惯使用MessageBox来显示中间的结果。

有了Cocoa的NSLog,你在写Cocoa程序的时候,就可以无需每次都调用NSAlert来观察中间结果了。


NSLog的定义

NSLog定义在NSObjCRuntime.h中,如下所示:

void NSLog(NSString *format, …);

基本上,NSLog很像printf,同样会在console中输出显示结果。不同的是,传递进去的格式化字符是NSString的对象,而不是chat *这种字符串指针。

示例

NSLog可以如下面的方法使用:

NSLog (@"this is a test");

NSLog (@"string is :%@", string);

NSLog (@"x=%d, y=%d", 10, 20);

但是下面的写法是不行的:

int i = 12345;

NSLog( @"%@", i );

原因是, %@需要显示对象,而int i明显不是一个对象,要想正确显示,要写成:



int i = 12345;

NSLog( @"%d", i );

格式

NSLog的格式如下所示:



%@     对象
%d, %i 整数
%u     无符整形
%f     浮点/双字
%x, %X 二进制整数
%o     八进制整数
%zu    size_t
%p     指针
%e     浮点/双字 (科学计算)
%g     浮点/双字
%s     C 字符串
%.*s   Pascal字符串
%c     字符
%C     unichar
%lld   64位长整数(long long)
%llu   无符64位长整数
%Lf    64位双字

    
[2] MTK手机软件系统的索引结构
    来源: 互联网  发布时间: 2014-02-18
MTK手机软件系统的目录结构
MTK手机软件系统的主要目录如下所示,一些相对不重要的目录略去。

.
|-- Fast_DL
|-- ROM
|-- adaptation
|-- applib
|-- bootloader
|-- config
|-- custom
|    |-- app
|    |    `-- TOP_6227_BB
|    |-- common
|    |-- drv
|    |    |-- LCD
|    |    |    `-- TOP_6227_LCM
|    |    `-- image_sensor
|    |        `-- MT9D011
|-- drv
|-- fs
|-- inc
|-- init
|-- interface
|-- j2me
|-- kal
|-- make
|    |-- applib
|    |    |-- applib.def
|    |    |-- applib.inc
|    |    |-- applib.lis
|    |    `-- applib.pth
|    |-- bootloader
|    |-- config
|    |-- custom
|-- media
|-- mmi
|-- modis
|-- mtk_lib
|    `-- MT6227
|        `-- S01
|            `-- gprs
|                |-- abm.lib
|                |-- adaptation.lib
|                |-- applib_inet.lib
|-- nucleus
|-- nvram
|-- plutommi
|-- tools

Fast_DL是开发时下载二进制映像和资源等的相关文件的目录。ROM是固化在ROM(可能是Flash的只读区)中的相关代码和头文件的目录,在给客户的发布版中大都只有一些导出函数的头文件,其中似乎还有一个跳转表的东西ROMSA_FuncTable。

    kal是上面所说的内核抽象层的相关文件的目录。nvram是存取NV中的内容的相关代码的目录。nucleus是nucleus实时操作系统的目录,在给客户的发布版中只有头文件。drv是驱动相关的代码的目录。fs是文件系统相关的目录,好像只支持fat格式的。tools是工程相关工具的目录,包括MinGW。interface是系统各层的接口的目录,还包含重要模块的接口,如bluetooth、WIFI。config是一些系统和任务(task)相关头文件的目录,感觉不像是配置相关的目录。inc是中断控制和寄存器地址相关头文件的目录。

    modis是PC模拟版的相关目录,包括了虚拟的GSM网络、SIM卡等,以及模拟器需要的字符串、图片等资源,还有PC模拟版的库、VC的相关工程文件。

    mmi是一个缺省的空的MMI应用的目录,其中只是创建了一个什么也不干的MMI任务(线程),处理下层发送上来的消息。plutommi是pluto组织(也可能是原本的mmi应用的代号)所写的整套MMI应用所在的目录,而实际上也就是我们需要定制和修改的MMI应用。其中的mmi目录中是pluto原本写好的mmi应用,mtkapp中是mtk后来所写的mmi应用,而Customer中是图片、字符串等资源的定制目录,大部分只是修改了字符串和图片、声音等的项目只要修改这个目录下的资源即可。

    mtk_lib中是已经编译链接好的ARM版的库。因整个工程过于庞大,若完整的全新构建一次需要很长的时间。为了减少构建的时间,将一些已经完全调试稳定且基本不再改动的库和MTK不开放源代码的库放到这个目录,这样每次构建时只需要将这些库和其他编译好的库链接起来就可以了。这些库一般是ARM版的,若有thumb版的,则再增加一个和ARM版相对的thumb版的库,一般叫第二个库,如media_sec.lib就是thumb版的多媒体库。

    custom是所有客户化项目的驱动程序及系统和MMI应用定制相关的文件的目录。如你的手机主板的RAM、FLASH等存储器的尺寸和地址空间有改动,MMI应用的特性有不同,蓝牙、WAP的配置有变化,或是有项目相关的新应用,其相关文件都是放在这个目录中和特定项目对应的目录下,如项目CUST1_6227,则放在CUST1_6227_BB下。要注意的是custom也作为一个模块存在,这使得其可以通过make目录中的custom模块的四个文件进行客户化的一些定制。

    applib、bootloader、init、media、j2me等是这个系统各个层次的相对独立的模块各自的目录,其实drv和fs等目录也可以看成是相对独立的模块,只不过其更重要些而在前面介绍。这些目录包含了这些模块的C文件和头文件。每个目录(模块)都在下面的make目录中有相对应的目录保存构建时的编译链接配置文件。

    make是工程构建过程中最重要的一个目录了,工程构建用的Makefile和一些中间配置文件将放在这里,Makefile在讲解构建过程时再具体介绍。在每个模块对应的目录下,都有四个文件控制了编译链接时的过程和配置。分别是:

      .def文件中是该模块构建过程中用的条件定义。

      .inc文件中是该模块所有用到的头文件所在目录的路径,是相对整个工程根目录的路径。

      .lis文件中列出了该模块的所有C文件,其路径也是相对整个工程根目录的。

      .pth文件中是该模块的所有C文件所在目录的路径,是相对整个工程根目录的路径。

    build目录中保存了构建过程中产生的目标文件和库文件,及其他一些中间文件。

    
[3] Animation Types-Grouping Animations
    来源: 互联网  发布时间: 2014-02-18
Animation Types----Grouping Animations
- (id)initWithFrame:(NSRect)frame {
    self = [super initWithFrame:frame];
      if (self) {
       CGFloat xInset = 3.0f * (NSWidth(frame) / 8.0f);
       CGFloat yInset = 3.0f * (NSHeight(frame) / 8.0f);
       NSRect moverFrame = NSInsetRect(frame, xInset, yInset);
       moverFrame.origin.x = NSMidX([self bounds]) -(NSWidth(moverFrame) / 2.0f);
       moverFrame.origin.y = NSMidY([self bounds]) -(NSHeight(moverFrame) / 2.0f);
mover = [[NSImageView alloc] initWithFrame:moverFrame];
[mover setImageScaling:NSScaleToFit];
[mover setImage:[NSImage imageNamed:@"photo.jpg" ]];
 NSDictionary *animations =[NSDictionary dictionaryWithObjectsAndKeys:
       [self groupAnimation:moverFrame], @"frameRotation" , nil];
       [mover setAnimations:animations];
       [self addSubview:mover];
  }
        return self;
}

 

 

- (CAAnimation *)frameAnimation:(NSRect)aniFrame {
        CAKeyframeAnimation *frameAnimation =[CAKeyframeAnimation animationWithKeyPath:@"frame" ];

NSRect start = aniFrame;
NSRect end = NSInsetRect(aniFrame, -NSWidth(start) * 0.50,-NSHeight(start) * 0.50);

frameAnimation.values = [NSArray arrayWithObjects:[NSValue valueWithRect:start],[NSValue valueWithRect:end], nil];

return frameAnimation;
}

- (CABasicAnimation *)rotationAnimation {
    CABasicAnimation *rotation =[CABasicAnimation animationWithKeyPath:@"frameRotation" ];
    rotation.fromValue = [NSNumber numberWithFloat:0.0f];
    rotation.toValue = [NSNumber numberWithFloat:45.0f];
    return rotation;
}

- (CAAnimationGroup *)groupAnimation:(NSRect)frame {
 CAAnimationGroup *group = [CAAnimationGroup animation];

group.animations = [NSArray arrayWithObjects:[self frameAnimation:frame],[self rotationAnimation], nil];

group.duration = 1.0f;
group.autoreverses = YES;
return group;
 
}
- (BOOL)acceptsFirstResponder {
       return YES;
}
- (void)keyDown:(NSEvent *)event {
       [[mover animator] setFrameRotation:[mover frameRotation]];
}

 


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