PhoneGap 0.8에서 쉐이크 제스처를 어떻게 감지 할 수 있습니까?
-
18-09-2019 - |
문제
PhoneGap 0.8을 사용하고 있으며 기본적인 쉐이크 제스처를 감지하고 싶습니다. 두 개의 관련 스 니펫을 찾았습니다.
http://groups.google.com/group/phonegap/browse_thread/thread/25178468b8eb9e9f
http://phonegap.pbworks.com/handling-shake-events
그들 중 누구도 나를 위해 일하지 않습니다. 불행히도 문서는 약간 구식으로 보이며 전화기에 대한 API 참조는 많은 테스트 일뿐입니다. 나는 그것이 잘 알려진 좋은 출발점이 없다는 것을 알고 있습니다.
누구든지 전화 갭에 대한 쉐이크 감지 코드의 짧은 스 니펫을 제공 할 수 있다면 그들에게 효과가 있다는 것을 알고 있습니다. 시간 내 줘서 고마워!
해결책
첫 번째 링크가 사용 중입니다 PhoneGap.Gesture
, 내가 볼 수있는 한, 0.8에는 (적어도 iPhone의 경우) 존재하지 않습니다. 최근 게시물이므로 최근에 추가되었을 수 있습니까? 0.8보다 나중에 개정을 사용하지 않았습니다
다음과 같이 폰 갭을 '확장'하여 폰 갭 앱에 Shake Gesture 지원을 추가했습니다. 그러나 먼저 경고 :
Apple은 App Store에 제출할 수있는 PhoneGap 0.8을 수용 할 수있는 것으로 간주했습니다. 이것은 본질적으로 PhoneGap 0.8에 대한 확장 (매우 간단하지만)이므로 거부의 위험이있을 수 있습니다. 내가 이것을 개발 한 앱은 아직 승인 프로세스를 거치지 않았으므로 더 이상 이에 대해 조언 할 수 없습니다.
또한 새로운 사용으로 인해 OS 3.0+에서만 작동합니다. UIEventSubtypeMotionShake
API
또한 이것은 iPhone 특정입니다. PhoneGap의 크로스 플랫폼 기능을 원한다면 다른 플랫폼 (Android 등)에서 기본 측면 수정을 편안하게 구현하지 않는 한이 답변은 귀하에게 적합하지 않을 수 있습니다. 이 경우 iPhone에서이를 지원하는 공식 PhoneGap 릴리스를 기다리는 것이 좋습니다.
다음 코드를 PhoneGapViewController.m에 추가하십시오
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
if (UIEventSubtypeMotionShake == motion)
{
[webView stringByEvaluatingJavaScriptFromString:@"navigator.myext.onShakeGesture();"];
}
}
그런 다음 이것을 JavaScript 모듈로 추가하십시오 myext.js
/* We need PhoneGap.js to be loaded to work properly before we can initialise so wait for it here */
(function()
{
var timer = setInterval(function()
{
if (typeof(PhoneGap == 'object'))
{
clearInterval(timer);
myExtInit();
}
}, 1);
})();
function MyExt()
{
// initialization
this.callbacks = {
onShakeGesture: []
};
}
/* Called by ObjectiveC side when a shake gesture is detected */
MyExt.prototype.onShakeGesture = function()
{
for (var i = 0; i < this.callbacks.onShakeGesture.length; i++)
{
var f = this.callbacks.onShakeGesture[i];
f();
}
};
MyExt.prototype.addShakeGestureListener = function(shakeCallback)
{
if (typeof(shakeCallback) == 'function')
{
this.callbacks.onShakeGesture.push(shakeCallback)
}
};
function myExtInit()
{
// Init phonegap extension specific objects using PhoneGap.addConstructor
PhoneGap.addConstructor(function() {
if (typeof navigator.myext == "undefined") navigator.myext = new MyExt();
});
}
이제 HTML 컨텐츠에 myext.js를 포함시킵니다 <head>
링크 직후 섹션 phonegap.js
<script type="text/javascript" charset="utf-8" src="myext.js"/>
스크립트에서 사용합니다 (예제는 경고를 유발하지만해야 할 일을 수행합니다) : :
function watchShake() {
var cb = function(){
navigator.notification.alert("Shake it!");
};
navigator.myext.addShakeGestureListener(cb);
}