猴子原創,轉載請註明出處。謝謝!
原文地址: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;
}