猴子原创,转载请注明出处。谢谢!
原文地址: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;
}