2010-01-06 4 views
2

PhoneGap 0.8을 사용하고 있는데 기본 손떨림을 감지하고 싶습니다. 그들 중 어느PhoneGap 0.8에서 흔들기 동작을 어떻게 감지 할 수 있습니까?

http://groups.google.com/group/phonegap/browse_thread/thread/25178468b8eb9e9f

http://phonegap.pbworks.com/Handling-Shake-Events

나를 위해 노력하고 있습니다 : 저는 두 관련 조각을 발견했습니다. 불행히도 설명서는 조금 오래되어 보이고 PhoneGap에 대한 API 참조는 테스트 다. 할 수 있다는 것을 알고 있습니다. 나는 단지 좋은 출발점을 가지고 있지 않습니다.

누구든지 PhoneGap에 대한 흔들림 감지 코드를 제공 할 수 있다면 그 사람에게 맞는 것으로 알게 될 것입니다. 많은 의무가 있습니다. 시간 내 줘서 고마워!

답변

3

첫 번째 링크는 0.을 사용하고 있습니다. 현재까지 볼 수있는 것은 0.8에 불과합니다 (적어도 iphone의 경우). 아주 최근 게시물이지만 최근에 추가되었을 수도 있습니다. 나는 0.8보다 최신 개정판을 사용하지 않았다.

나는 phonegap을 '연장'하여 다음과 같이 phonegap 앱에 흔들기 제스처 지원을 추가했다. 하지만 먼저 경고 :

애플은 PhoneGap 0.8을 앱 스토어에 제출할 수있는 것으로 간주합니다. 이것은 본질적으로 PhoneGap 0.8에 대한 확장 (매우 간단 함에도 불구하고)이므로 거절의 위험이있을 수 있습니다. 내가 개발 한 앱은 아직 승인 프로세스를 거치지 않았으므로 이에 대해 더 이상 조언 할 수는 없습니다.

또한 또한이 아이폰 고유의 것입니다 이것은 단지 때문에 새로운 UIEventSubtypeMotionShake API

의 사용 3.0 이상 OS에서 작동 점에 유의. PhoneGap의 크로스 플랫폼 기능을 원한다면 다른 플랫폼 (안드로이드 등)에서 네이티브 측 수정을 구현하기가 쉽지 않으면이 대답이 도움이되지 않을 수도 있습니다. 이 경우 아이폰에서 지원하는 공식 phonegap 릴리스를 기다리는 것이 더 나을 수도 있습니다.

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event 
{ 
    if (UIEventSubtypeMotionShake == motion) 
    { 
     [webView stringByEvaluatingJavaScriptFromString:@"navigator.myext.onShakeGesture();"]; 
    } 
} 

그런 다음 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 콘텐츠에 바로 링크 후 <head> 섹션을 myext.js을 포함 자바 스크립트 모듈로이 추가 PhoneGapViewController.m

에 다음 코드를 추가합니다 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); 
} 
+0

감사합니다. 이것은 원래의 질문에 답하는 것과 함께 PhoneGap 확장에 대한 좋은 통찰력을 제공합니다. – GloryFish

+0

애플은 결국 애플의 인수 프로세스를 통과 했습니까? – Ash

+1

@Ash, 프로젝트를 포기했기 때문에 결코 알아 내지 못했습니다. 그러나 나는 우연히 PhoneGap 통합과 함께 다른 프로젝트를 진행하고 PhoneGap의 새로운 빌드는이 대답 대신 사용할 수있는 훨씬 더 확장 가능한 플러그인 프레임 워크 (PGPlugin)를 가지고 있습니다. http://wiki.phonegap.com/w/page/36753496/How%20to%20Create%20a%20PhoneGap%20Plugin%20for%20iOS를 참조하십시오. – cidered

관련 문제