现在的位置: 首页 > 综合 > 正文

cocos2d-x 注册iOS自带手势识别

2013年07月19日 ⁄ 综合 ⁄ 共 2351字 ⁄ 字号 评论关闭

猴子原创,转载请注明出处。谢谢!

原文地址:http://blog.csdn.net/yanghuiliu/article/details/6961048

现在项目中有涉及到手势识别的,其实我们可以直接利用ios自带的手势识别系统帮我们来识别。

看看实现:

我们要实现手势的类的头文件:

#include"GTGestureProtocol.h"

#include"RootViewController.h"

#include"FMGBGameData.h"

class  GTLevelMenu :publiccocos2d::CCLayer,publicGTGestureProtocol{

private:

   virtualvoid GTGestureTrigger(GTGestureDir dir);

};


在cpp中init方法中将自己传到RootViewController中。

RootViewController *root= (RootViewController*)(FMGBGameData::sharedFMGBGameData()->appRootViewController);

    root.delegate=this;


使用的时候:

voidGTLevelMenu::GTGestureTrigger(GTGestureDir dir)

{

//dir就是下面枚举的几个方向

}




不相关的代码我就不列出来了。

这里是一个layer,我想实现在这个layer上面实现手势监听。

GTGestureDir是一个代理,给iOS手势识别使用。GTGestureDir的实现:

typedefenum GTGestureDir

{

    GTGestureDirNONE = 0,

    GTGestureDirUP,

    GTGestureDirDOWN,

    GTGestureDirLEFT,

    GTGestureDirRIGHT,

}GTGestureDir;

class GTGestureProtocol

{

public:

   virtualvoid GTGestureTrigger(GTGestureDir dir){};

};

#endif



下面修改如何从ios手势识别中返回结果:

在iOS目录下修改RootViewController.h。加入我们的代理类

//

//

//  Created by Yanghui Liu on 11-10-14.

//  Copyright company 2011. All rights reserved.

//

#import<UIKit/UIKit.h>


#include"GTGestureProtocol.h"

@interface RootViewController :UIViewController {

    

       GTGestureProtocol * delegate_;


}

@property (nonatomic,assign)GTGestureProtocol
* delegate;

@end



RootViewController.mm中加入下面的手势识别:

-(void)handleGesture:(UISwipeGestureRecognizer *)recognizer { 

   if (recognizer.direction==UISwipeGestureRecognizerDirectionDown)

       if (delegate_) {

           delegate_->GTGestureTrigger(GTGestureDirDOWN);

        }

        

}

elseif(recognizer.direction==UISwipeGestureRecognizerDirectionUp)
{

        if (delegate_) {

            delegate_->GTGestureTrigger(GTGestureDirUP);

         }

}

elseif(recognizer.direction==UISwipeGestureRecognizerDirectionLeft)
{

       if (delegate_) {

           delegate_->GTGestureTrigger(GTGestureDirLEFT);

        }


}

elseif(recognizer.direction==UISwipeGestureRecognizerDirectionRight)
{

       if (delegate_) {

           delegate_->GTGestureTrigger(GTGestureDirRIGHT);

        }


}

}


最后还有一个单例返回的类没实现:

头文件

class FMGBGameData :publicCCObject {

    

public:

virtualbool init(void);

virtual ~FMGBGameData(void);

FMGBGameData(void);

/**单例FMGameApiRequest */

staticFMGBGameData* sharedFMGBGameData(void);

};



单例实现cpp

staticFMGBGameDatas_sharedData;

staticbool bFirstRun =true;

FMGBGameData::~FMGBGameData(void) {

}

FMGBGameData::FMGBGameData(){

}

FMGBGameData*FMGBGameData::sharedFMGBGameData(void) {

if (bFirstRun)
{

s_sharedData.init();

bFirstRun =false;

}

return &s_sharedData;

}


抱歉!评论已关闭.