Skip to content

Instantly share code, notes, and snippets.

@gin0606
Created December 25, 2013 04:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gin0606/8120138 to your computer and use it in GitHub Desktop.
Save gin0606/8120138 to your computer and use it in GitHub Desktop.
CCMenuItemで長押しを検知する
//
// Created by gin0606 on 2013/12/25.
//
#include "KKMenuItem.h"
KKMenuItem::KKMenuItem() :
CCMenuItem(),
target(NULL),
selector(NULL),
longPressSelector(NULL),
pressTime(0),
minimumPressDuration(0.5)
{
}
KKMenuItem::~KKMenuItem() {
}
KKMenuItem *KKMenuItem::create() {
return create(NULL, NULL);
}
KKMenuItem *KKMenuItem::create(CCObject *rec, SEL_MenuHandler selector) {
KKMenuItem *pRet = new KKMenuItem();
if (pRet && pRet->initWithTarget(rec, selector)) {
pRet->autorelease();
} else {
delete pRet;
pRet = NULL;
}
return pRet;
}
bool KKMenuItem::initWithTarget(CCObject *rec, SEL_MenuHandler selector) {
this->target = rec;
this->selector = selector;
return CCMenuItem::initWithTarget(rec, selector);
}
void KKMenuItem::selected() {
CCMenuItem::selected();
time(&pressTime);
}
void KKMenuItem::unselected() {
time_t currentTime = 0;
time(&currentTime);
if (this->longPressSelector && currentTime - pressTime > minimumPressDuration) {
this->setTarget(this->target, this->longPressSelector);
} else {
this->setTarget(this->target, this->selector);
}
CCMenuItem::unselected();
}
#pragma mark - getter/setter
void KKMenuItem::setTarget(CCObject *rec, SEL_MenuHandler selector) {
CCMenuItem::setTarget(rec, selector);
this->target = rec;
this->selector = selector;
}
void KKMenuItem::setLongPressSelector(SEL_MenuHandler selector) {
this->longPressSelector = selector;
}
//
// Created by gin0606 on 2013/12/25.
//
#ifndef __KKMenuItem_H_
#define __KKMenuItem_H_
#include "cocos2d.h"
USING_NS_CC;
class KKMenuItem : public CCMenuItem {
CC_PROPERTY(time_t , minimumPressDuration, MinimumPressDuration);
private:
CCObject *target;
SEL_MenuHandler selector;
SEL_MenuHandler longPressSelector;
time_t pressTime;
public:
KKMenuItem();
virtual ~KKMenuItem();
static KKMenuItem* create();
static KKMenuItem* create(CCObject *rec, SEL_MenuHandler selector);
virtual bool initWithTarget(CCObject *rec, SEL_MenuHandler selector);
virtual void selected();
virtual void unselected();
virtual void setTarget(CCObject *rec, SEL_MenuHandler selector);
void setLongPressSelector(SEL_MenuHandler selector);
};
#endif //__KKMenuItem_H_
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment