문제

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);
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top