iPhone 화면 방향을 감지합니다
-
14-09-2019 - |
문제
iPhone의 방향을 45도 단위로 감지하고 싶습니다. 이상적으로 나는 모든 축을 따라 방향 각도를 얻을 수 있기를 원합니다.
내가해야 할 감지는 방향이 바뀔 때 iPhone의 트리즘이 화면의 현재 하단 위치를 향해 화살표를 깜박이는 방법과 유사합니다.
나는 코딩 된 것이 있지만 가속도계 판독 값이 어떻게 작동하는지 이해하지 못하고 올바른 방향으로 누드를 사용할 수 있습니다. 내 현재 코드는 현재 각도를 기록하지만 전화가 평평한 경우에도 읽기가 몇 배에 따라 크게 다양합니다.
- (void) checkOrientation:(UIAccelerometer*)accelerometer didAccelerate:(UIAcceleration*)acceleration
{
int accelerationX = acceleration.x * kfilteringFactor + accelerationX * (1.0 - kfilteringFactor);
int accelerationY = acceleration.y * kfilteringFactor + accelerationY * (1.0 - kfilteringFactor);
float currentRawReading = (atan2(accelerationY, accelerationX)) * 180/M_PI;
NSLog(@"Angle: %f",currentRawReading);
}
전화가 평평한 동안 로그에서 샘플 :
2009-06-16 17:29:07.987 [373:207] Angle: 0.162292
2009-06-16 17:29:07.994 [373:207] Angle: 179.838547
2009-06-16 17:29:08.014 [373:207] Angle: 179.836182
2009-06-16 17:29:08.032 [373:207] Angle: -90.000000
2009-06-16 17:29:08.046 [373:207] Angle: 179.890900
2009-06-16 17:29:08.059 [373:207] Angle: -90.000000
2009-06-16 17:29:08.074 [373:207] Angle: 179.917908
2009-06-16 17:29:08.088 [373:207] Angle: -179.950424
2009-06-16 17:29:08.106 [373:207] Angle: 90.000000
2009-06-16 17:29:08.119 [373:207] Angle: 90.000000
2009-06-16 17:29:08.134 [373:207] Angle: -179.720245
해결책
당신의 문제는 당신이 사용하고 있다는 것입니다 int
원할 때 변수 float
.
제 생각에는 accelerationX
그리고 –y는 인스턴스 변수이어야하므로 다음과 같습니다.
accelerationX = acceleration.x * kfilteringFactor + accelerationX * (1.0 - kfilteringFactor);
accelerationY = acceleration.y * kfilteringFactor + accelerationY * (1.0 - kfilteringFactor);
당신이 찾고 있던 것을 더 많이 주어야합니다.
다른 팁
그 이유는 로컬 변수를 사용하고 있지만 로컬 변수는 아니기 때문입니다.
다음을 시도하십시오.
인스턴스 변수 선언 :
@interface YourViewControllerClass: UIViewController {
float accelerationX, accelerationY;
}
...
other declarations
가속도계 대의원의 변수 업데이트 :
accelerationX = acceleration.x * kfilteringFactor + accelerationX * (1.0 - kfilteringFactor);
accelerationY = acceleration.y * kfilteringFactor + accelerationY * (1.0 - kfilteringFactor);
갑자기 점프하지 않고 더 정확한 결과를 제공해야합니다.
제휴하지 않습니다 StackOverflow