当前位置:  编程技术>移动开发
本页文章导读:
    ▪objective-c多参数解析跟@class声明的作用        objective-c多参数解析和@class声明的作用 Objective-C 多参数成员函数  多个参数的写法 (方法的数据类型)函数名:(参数1数据类型)参数1的数值的名字 参数2的名字: (参数2数据类型) 参数2值.........
    ▪ 取装置信息        取设备信息 NSLog([[UIDevice currentDevice] name]); // Name of the phone as named by user NSLog([[UIDevice currentDevice] uniqueIdentifier]); // A GUID like string NSLog([[UIDevice currentDevice] systemName]); // "iPhone OS" NSLog([[UIDevice curr.........
    ▪ NSDictionary / NSMutableDictionary 及 NSArray / NSmutableArray (范例)       NSDictionary / NSMutableDictionary 及 NSArray / NSmutableArray (实例) NSDictionary 和 NSArray一样是不可变的对象。用来实现字典集合,在给定关键字(通常是一个NSString字符串)下存储一个数值(可以是任何类型.........

[1]objective-c多参数解析跟@class声明的作用
    来源: 互联网  发布时间: 2014-02-18
objective-c多参数解析和@class声明的作用

Objective-C 多参数成员函数 

多个参数的写法

(方法的数据类型)函数名:(参数1数据类型)参数1的数值的名字 参数2的名字: (参数2数据类型) 参数2值的名字 …. ;

举个例子,一个方法的定义:

-(void) setKids: (NSString *)myOldestKidName secondKid: (NSString *) mySecondOldestKidName thirdKid: (NSString *) myThirdOldestKidName;

实现这个函数的时候:

-(void) setKids: (NSString *)myOldestKidName secondKid: (NSString *) mySecondOldestKidName thirdKid: (NSString *) myThirdOldestKidName

{  

大儿子 = myOldestKidName; 二儿子 = mySecondOldestKidName; 三儿子 = myThirdOldestKidName;

}

调用的时候:

Kids *myKids = [[Kids alloc] init];

[myKids setKids: @”张大力” secondKid: @”张二力” thirdKid: @”张小力”];


按个人的理解就是 Objective-C中参数表是这样的, 实参名:(数据类型)形参名。第一个参数的实参名就是函数名。

 

 

@class声明的作用

如果在a.h里import了b.h,那么所有import了a.h的文件都会同时与b.h产生编译依赖,一旦b.h被修改,所有应用了a.h 的文件也要被重新编译。如果可以使用前置声明而不是import b.h,而是用@class,就可以解除这种依赖关系,b.h被修改,只import了a.h的文件就未必需要重新编译。

 

 

cocos2d-x总结(三)场景中的层(CCLayer)及其触摸消息响应

2012-2-16 12:24 | 发布者: benben | 查看数: 191 | 评论数: 0
摘要: 之前已经建立好了一个场景,在建立场景的时候,已经将一个CCLayer加到场景的子节点上,这个节点将作为这个场景的父节点,场景中所有的内容都将以它的孩子身份出现。在移动设备上,最常处理的就是触摸消息的响应了。 ...

之前已经建立好了一个场景,在建立场景的时候,已经将一个CCLayer加到场景的子节点上,这个节点将作为这个场景的父节点,场景中所有的内容都将以它的孩子身份出现。在移动设备上,最常处理的就是触摸消息的响应了。

 

单点触控:Targeted Touch Delegate方式

一个层接收触摸消息需要如下步骤:

1,在初始化阶段将此层的属性设置为接收触摸消息。例如在init()函数中添加:

m_bIsTouchEnabled = true;  或 setIsTouchEnabled(true);

2,重载函数virtual void registerWithTouchDispatcher(void);

因为默认的方式为Standard Touch Delegate,因此需要重新注册,在函数中添加以下语句

CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this, INT_MIN+1, true);

其中第二个参数为优先级,优先级数值越低,越先响应(未测试)

3,重载触摸响应函数

接收触摸消息需要重载以下函数

virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);// 必须实现virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent);

这里需要注意的事第一个函数是必须实现的,否则点击会抛出异常

 

多点触控:Standard Touch Delegate方式(CCLayer默认采纳这种方式)

支持这种方式同样需要三个步骤:

1,同Targeted Touch Delegate方式第一步

2,将此节点添加到StandardDelegate(对于CCLayer可以省略此步),以实现一个可以点击的CCSprite为例:

     在onEnter函数中添加

cocos2d::CCTouchDispatcher::sharedDispatcher()->addStandardDelegate(this,0);

 

3,重载响应函数    

virtual void ccTouchesBegan(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent);virtual void ccTouchesMoved(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent);virtual void ccTouchesEnded(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent);virtual void ccTouchesCancelled(cocos2d::CCSet*pTouches,cocos2d::CCEvent *pEvent);

其中 pTouches为一个CCTouch的集合,可以通过以下方法来获取单一触点

if(!pTouches||!pTouches->count()){	return;}cocos2d::CCTouch* pTouch = (cocos2d::CCTouch*)(*(pTouches->anyObject()));

获取全部触点需要遍历这个集合

for(CCSetIterator iterTouch = pTouches->begin(); iterTouch != pTouches->end(); iterTouch++){	CCTouch *pCurTouch =  (cocos2d::CCTouch*)(*iterTouch);	// do something}

4,从StandardDelegate移除:

如果第二步将自定义的CCSprite加入到StandardDelegate,那么在此CCSprite被清除时,移除此CCSprite。在onExit函数中调用

cocos2d::CCTouchDispatcher::sharedDispatcher()->removeDelegate(this);

获取触点位置

从CCTouch中可以获取到触点的位置主要有以下几种方式

1:获取UIView坐标

CCPoint ptTouch = pTouch->locationInView(pTouch->view());

这里获取的是设备的UIView坐标,原点在左上角,X向右侧递增,Y向下递增。

2:获取节点坐标

CCPoint ptNode = convertTouchToNodeSpace(pTouch);

节点坐标的计算同GL坐标,它以所在节点的左下角为原点,X向右递增,Y向上递增

3,获取锚点坐标

一个节点,所有的变换都是基于锚点,比如平移,旋转,缩放等。可以通过函数setAnchorPoint(CCPoint var);来改变锚点。cocos2d-x里节点默认的锚点是中心点,即等同于setArchorPoint(ccp(0.5, 0.5));其中(0,0)代表左下角,(1,1)代表右上角。

CCPoint ptNodeAR = convertTouchToNodeSpaceAR(pTouch);

这时,坐标系的原点在该节点的锚点位置。X向右递增,向左递减;Y向上递增,向下递减

 


    
[2] 取装置信息
    来源: 互联网  发布时间: 2014-02-18
取设备信息
NSLog([[UIDevice currentDevice] name]); // Name of the phone as named by user
NSLog([[UIDevice currentDevice] uniqueIdentifier]); // A GUID like string
NSLog([[UIDevice currentDevice] systemName]); // "iPhone OS"
NSLog([[UIDevice currentDevice] systemVersion]); // "2.2.1"
NSLog([[UIDevice currentDevice] model]); // "iPhone" on both devices
NSLog([[UIDevice currentDevice] localizedModel]); // "iPhone" on both devices
float version = [[[UIDevice currentDevice] systemVersion] floatValue]; 

    
[3] NSDictionary / NSMutableDictionary 及 NSArray / NSmutableArray (范例)
    来源: 互联网  发布时间: 2014-02-18
NSDictionary / NSMutableDictionary 及 NSArray / NSmutableArray (实例)

NSDictionary 和 NSArray一样是不可变的对象。用来实现字典集合,在给定关键字(通常是一个NSString字符串)下存储一个数值(可以是任何类型的对象)。

 

NSDictionary使用类方法 dictionaryWithObjectAndKeys: 来创建字典;使用方法objectForKey: 来获取字典中的值。

NSDictionary *dict = [NSDictionary dictionaryWithObjectAndKeys:@"just",@"firstname", 
                                                                @"code",@"lastname",
                                                                @"xcode@apple.com",@"email",
                                                                nil]; 
NSString* firstName = [dict objectForKey:@"firstname"];
  

NSMutableDictionary是可变对象,可以进行添加和删除操作。可以是用dictionaryWithCapacity: (这里的容量也只是个参考值,表示对大小的限制)或 dictionary 来创建可变字典。

 

//NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
NSMutableDictionary *dict = [NSMutableDictionary dictionary];

[dict setObject:@"John" forKey:@"Firstname"];
[dict setObject:@"Doe" forKey:@"Lastname"];
[dict setObject:@"info@objectgraph.com" forKey:@"Email"];

NSLog(@"%@", dict);

NSArray *keys = [dict allKeys];
 
// values in foreach loop
for (NSString *key in keys) {
	NSLog(@"%@ is %@",key, [dict objectForKey:key]);
}

[dict removeObjectForKey:@"Email"];
 

addObject : 在数组末尾添加对象 (id)anObject

removeObjectAtIndex : 删除特定索引处的对象

 

 

Objective-C数组相关操作。

// insert code here...
NSLog(@"数组");
//指定多个字符串创建数组
NSArray *array;
array=[NSArray	arrayWithObjects:@"0-asd",@"1-fds",@"2-哈咯",@"3-个人",nil];
//数组的长度
NSLog(@"数组长度%d",array.count);
//通过索引取得对象
for(int i=0;i<array.count;i++)
{
	NSString *secondStr=[array objectAtIndex:i];
	NSLog(secondStr,nil);
}
//高速枚举法取得对象,Objective-C2.0开始支持,
for(NSString *str in array)
{
	NSLog(str,nil);
}
//对象的追加于删除
//创建空数组
NSMutableArray *MutArray=[NSMutableArray array];
//追加对象
[MutArray addObject:@"A"];
[MutArray addObjectsFromArray:array];
//插入对象
NSString *thstr=@"插入值";
[MutArray insertObject:thstr atIndex:4];
//替换对象
[MutArray replaceObjectAtIndex:2 withObject:@"替换"];
//删除所有对象
//[Mutarray removeAllObjects];
//删除最后的对象
[MutArray removeLastObject];
//删除索引为Index的对象
[MutArray removeObjectAtIndex:0];
//删除所有于object同值的对象
[MutArray removeObject:@"0-asd"];
//删除数组中所有与object等价的对象
[MutArray removeObjectIdenticalTo:thstr];
//删除数组中所有与数组array包含相同的元素
[MutArray removeObjectsInArray:array];
NSLog(@"%@",MutArray);

 

 

NSDictionary 常用方法总结 +(id)dictionaryWithObjectsAndKeys:obj1,key1,obj2,key2,......nil 顺序添加对象和键值来创建一个字典,注意结尾是nil -(id)initWithObjectsAndKeys::obj1,key1,obj2,key2,......nil 初始化一个新分配的字典,顺序添加对象和值,结尾是nil -(unsigned int)count 返回字典中的记录数 -(NSEnumerator*)keyNSEnumerator 返回字典中的所有键到一个 NSEnumerator 对象 -(NSArray*)keysSortedByValueUsingSelector:(SEL)selector 将字典中所有键按照selector 指定的方法进行排序,并将结果返回 -(NSEnumerator*)objectEnumerator 返回字典中所有的值到一个 NSEnumetator 类型对象 -(id)objectForKey:key 返回指定key 值的对象

 

NSMutableDictionary 常用方法总结 +(id)dictionaryWithCapacity:size 创建一个size大小的可变字典 -(id)initWithCapacity:size 初始化一个size 大小的可变字典 -(void)removeAllObjects 删除字典中所有元素 -(void)removeObjectForKey:key 删除字典中key位置的元素 -(void)setObject:obj forKey:key 添加 (key , obj)到字典中去;若key已经存在,则替换值为 obj

 

 

NSArray 不可变数组 常用方法 +(id)arrayWithObjects:obj1,obj2,...nil 创建一个新的数组,obj1,obj2......是他的元素对象,以nil对象结尾 -(BOOL)containsObject:obj 确定数组中是否包含对象obj -(NSUInteger)count 返回数组元素个数 -(NSUInteger)indexOfObject:obj 第一个包含obj元素的索引号 -(id)objectAtIndex;i 返回存储在位置 i 的对象 -(void)makeObjectsPerformSelector:(SEL)selector 将 selector 只是的消息发送给数组中的每个元素 -(NSArray*)sortedArrayUsingSelector:(SEL)selector 根据selector 指示的比较方法对数组进行排序 -(BOOL)writeToFile:path atomically:(BOOL)flag 将数组写入指定的文件中,如果 flag 为 YES,则需要先创建一个临时文件

 

 

NSmutableArray 常用方法总结 array 创建一个空数组 +(id)arrayWithCapacity:size 创建一个数组,指定容量为size -(id)initWithCapacity:size 初始化一个新分配的数组,指定容量为size -(void)addObject:obj 将对象obj添加到数组末尾 -(void)insertObject:obj atIndex:i 将对象 obj 插入到索引为 i 的位置 -(void)replaceObject:obj atIndex:i 将数组中索引为 i 处的元素用obj 置换 -(void)removeObject:obj 从数组中删除所有是 obj 的对象 -(void)removeObjectAtIndex:i 从数组中删除索引为 i 的对像 -(void)sortUsingSelector:(SEL)selector 用 selector 只是的比较方法将数组排序

 

 

 

 


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
WEB前端 iis7站长之家
▪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