`
icrwen
  • 浏览: 269558 次
  • 性别: Icon_minigender_2
  • 来自: 济南
社区版块
存档分类
最新评论

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)及其触摸消息响应

摘要: 之前已经建立好了一个场景,在建立场景的时候,已经将一个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向上递增,向下递减

 

分享到:
评论

相关推荐

    Objective-C基础知识

    对于想要深入了解Objective-C的开发者来说,Steve Kochan的《Programming in Objective-C》是一本极佳的资源,它详细介绍了Objective-C的核心概念和实践技巧。此外,苹果官方文档也是学习Objective-C的重要资源之一...

    Objective-C 速查手册 1.2 (ARC版)

    本文将依据给定的“Objective-C速查手册1.2(ARC版)”内容,详细解析Objective-C的关键概念和使用技巧。 #### 二、类定义与实现 ##### 类头文件(.h) 在Objective-C中,每个类由两部分组成:类头文件和类实现...

    From C++ to Objective-C

    ### 从C++到Objective-C:关键知识点解析 #### 一、Objective-C与Cocoa简介 Objective-C是一种面向对象的编程语言,它基于C语言,并引入了面向对象的概念和技术。Objective-C是苹果公司用于开发Mac OS X和iOS操作...

    Objective-C 基础教程

    - **Class Types(类类型)**:介绍了Objective-C中的几种不同的类类型,包括常规类和元类。 - **Class Objects(类对象)**:讲解了如何创建和使用类对象,以及类对象的一些属性和方法。 - **Class Names in Source...

    Objective-C编程(第3版)

    **Objective-C**是一种面向对象的编程语言,它在C语言的基础上增加了面向对象的特性,是开发iOS和macOS应用的主要语言之一。本书《Objective-C编程(第3版)》由Stephen G. Kochan撰写,旨在为读者提供一个全面了解...

    Objective-C2.0基础教程课后 答案

    Objective-C2.0是苹果公司开发的一种面向对象的编程语言,它是C语言的超集,同时结合了Smalltalk的特性,被广泛应用于iOS和macOS应用程序的开发。本教程课后答案旨在帮助学习者深入理解和巩固Objective-C2.0的基础...

    Objective_c快速入门及解释

    - Objective-C 是一门动态类型的语言,支持运行时类型检查和动态方法解析,可以动态添加属性和方法,甚至替换类的行为。 8. **内存管理(Memory Management)**: - Objective-C 使用引用计数(Reference ...

    objc runtime 源码 208

    在iOS开发中,Objective-C runtime 是一个至关重要的底层机制,它为Objective-C提供了动态性,使得语言具有灵活性和强大的功能。Objective-C runtime 是一个C语言实现的库,它负责对象的创建、方法调用、类型检查等...

    ProgrammingWithObjectiveC.

    Objective-C是C语言的一个超集,增加了Smalltalk风格的消息传递机制和动态运行时特性。以下是从文档内容提取出的相关知识点: 1. 类(Class)和对象(Object):在Objective-C中,类是对象的蓝图。开发者定义类来...

    object-c基础教程.pdf

    - 在Objective-C中,方法和消息可以互换使用,但消息具有动态转发的特性,即可以通过动态调度转发给其他对象处理。 - **类(Class)定义**: - **接口(interface)**: 定义了类的公开接口。 - **实现(implementation)...

    ObjCRuntimeGuide

    Objective-C是一种面向对象的编程语言,它在C语言的基础上扩展了面向对象的特性。Objective-C的特点之一是其强大的运行时(runtime)系统,这使得许多原本在编译期或链接期进行的操作可以推迟到程序运行时执行。这种...

    runtime 源码

    - 在 Objective-C 中,每个对象都有一个指向元类(meta-class)的指针,元类存储了类的方法列表和超类信息。 - 对象实例包含一个 isa 指针,它指向对象所属的类,从而确定对象的类型和可以响应的消息。 2. **消息...

    简单分析Swift语言的一些基本特征

    Swift是苹果公司为iOS、macOS、watchOS和tvOS平台设计的一种现代化编程语言,它在2014年发布,旨在提供一种更...虽然它在某些方面与Objective-C相似,但在很多地方进行了优化和改进,为开发者提供了更好的开发体验。

    iOS面试题2019年度总结188题(下).pdf

    - **语法扩展**:Objective-C基于C语言但添加了更多面向对象特性的语法。 ### 第98题:什么是协议?如何实现协议? - **协议**(Protocol)定义了一组方法签名,没有实现细节。它相当于一种契约,规定了遵循它的类...

    iOS.5.Programming.Cookbook

    - **1.7 Declaring Variables in Objective-C**(在Objective-C中声明变量) - 掌握Objective-C中的数据类型,如整型、浮点型、布尔型等。 - 学习如何正确声明和初始化变量。 - **1.8 Comparing Values in ...

    ios runtime动态添加方法demo

    它是一个C语言库,为Objective-C提供了动态特性的支持,如消息传递、动态类型、方法解析等。在iOS应用开发中,熟练掌握Runtime技术能帮助开发者实现很多高级功能,比如KVO(Key-Value Observing)、Category的扩展、...

    uvccontrol

    标题“uvccontrol”指的是一个Objective-C项目,其主要功能是提供对UVC(Universal Video Class)摄像头的控制。UVC是一种USB视频设备类标准,它允许开发者在兼容的硬件上进行高质量的视频捕获,而无需关心底层硬件...

    The NSHipster Fake Book

    - NS_ENUM是Objective-C中引入的一种枚举类型声明方式,提供了更强的类型检查和枚举值的封装。 2. **声明NS_OPTIONS类型(Declaring an NS_OPTIONS Type)** - 类似于NS_ENUM,NS_OPTIONS用于定义一组位掩码选项...

    WYPopoverController.zip

    《深入解析WYPopoverController:Objective-C中的弹出控件设计与实现》 在iOS应用开发中,弹出视图是一种常见的用户交互元素,它能够以优雅的方式展示额外的信息或者提供更多的操作选项。WYPopoverController是...

    网讯iOS笔试题

    协议在Objective-C中用于定义一个接口,该接口声明了一组方法,但没有提供具体的实现。以下是一个简单的协议实现示例: ```objective-c @protocol SimpleProtocol - (void)doSomething:(NSString *)str; @end @...

Global site tag (gtag.js) - Google Analytics