기대 모션 업데이트의 실제 빈도가 예상보다 낮지 만 설정으로 확장됩니다.

StackOverflow https://stackoverflow.com/questions/5034411

문제

iOS 3의 가속도계를 사용하여 iOS 3의 모션 기능을 통합하는 앱을 포리팅하고 있습니다.

동작을 캡처하는 동안 응용 프로그램이 거의 없습니다. 예를 들어 그래픽 업데이트가 거의 없습니다.

가속도계의 이전 사용을위한 교체로서 동영상 업데이트를 설정하려면 다음을 수행합니다. 나는 nstimer 또는 무언가를 사용하여 내 자신의 폴링을하기 위해 재건 할 수 있음을 깨닫고, 아직 그것을 추구 할 수 있습니다.

[motionManager setDeviceMotionUpdateInterval:updateInterval];
CMDeviceMotionHandler motionHandler = ^(CMDeviceMotion *motion, NSError *error) {
[self processMotion:motion withError:error];
};

[motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:motionHandler];

이 작동하지만 업데이트 간격은 예상대로 작동하지 않습니다. 실제 모션 업데이트 속도가 무엇인지 확인하기 위해 Timestamps를 저장하는 것을 제외하고는 ProcessMotion 메서드에서 모든 실행 코드를 제거했습니다. 나는 그것이 반복 가능하다는 것을 증명하기에 충분히 테스트했을 정도로, 1/40의 이상한 결과조차도, 아래 표는 내가 무엇을보고있는 것을 보여줍니다 :

updateInterval  actual events per second
1.0/20.0        13
1.0/30.0        27
1.0/40.0        27
1.0/50.0        34
1.0/60.0        40
1.0/70.0        57
1.0/90.0        60
1.0/100.0      74
.

일부 메모 :

1. 업데이트 간격이 제대로 설정되고 확인을 위해 설정 한 후에 확인했는지 확인하십시오.



2. 나는 ProcessMotion의 모든 호출을 추적하고 있다고 확신합니다. Nil CmdeviceMotion 또는 다른 낯선 사람으로 만들어지지 않습니다


3. 나는 사물을 차단하고, 모션 이벤트를 기다리고 녹음하는 것을 막을 수있는 중요한 처리를하지 않습니다. 이 모든 것은 가속도계의 대리자로 완벽하게 잘 작동했습니다

4. 모션 데이터가 좋고 너무나 드물게 업데이트됩니다. :)

5. 이것은 iPod touch 4th Gen에서 iOS 4.2를 사용하고 있습니다

6. 나는 최선을 다해, 60Hz를 요청할 때 50Hz 업데이트 빈도를보고있는 사람들의 보고서를 보았지만, 관련이 없었지만, 관련이없는 60Hz를 보았습니다.

현재 대기열을 사용하는 대신 처리를 위해 전용 큐를 설정하는 것입니다. 그러나 이것이 알려진 동작인지 여부를보고 싶었습니다. 나는 업데이트 속도가 어떻게 든 병들인지를 알 수 있지만, 그 사건이있는 것처럼 여전히 여전히 확장 될 것인지 확실하지는 않지만, 확실하지는 못하면 이해할 수 있습니다.


다시 말하지만, 나는 Nstimer를 사용하고 내 자신의 투표를하기 위해 재건 할 수 있다고 가정하지만, 왜 내가 이것을보고 있는지 이해하고 싶습니다. 핵심 모션 프레임 워크를 근본적으로 오해하는 경우

도움이 되었습니까?

해결책

Okay, here's a possible solution:

Number of concurrent operations on NSOperationQueue are determined by the OS. That means it sometimes can be very few or even 1 operation at a time.

You can explicitly set the number of operations to a certain reasonable number, e.g.

[operationQueue setMaxConcurrentOperationCount:5];

Enjoy.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top