Advertisement
Guest User

Untitled

a guest
Nov 26th, 2014
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.26 KB | None | 0 0
  1. //
  2. // TULNavigationManager.swift
  3. // TheUndergroundLocalizer
  4. //
  5. // Created by Przemyslaw Blasiak on 26.11.2014.
  6. // Copyright (c) 2014 bprzemyslaw. All rights reserved.
  7. //
  8.  
  9. import UIKit
  10.  
  11. class TULNavigationManager: NSObject, CLLocationManagerDelegate
  12. {
  13. var currentPosition: CGPoint?
  14. var targetPosition: CGPoint?
  15. var locationOrientation: Double?
  16.  
  17. float oldAngle;
  18.  
  19. //W TULNavigationManager.h daj @property(nonatomic, retain) CLLocationManager *locationMaganer;
  20. override init()
  21. {
  22. super.init()
  23.  
  24. oldAngle = 0;
  25. self.locationManager = [[CLLocationManager alloc] init];
  26. self.locationMaganer.desiredAccuracy = kCLLocationAccuracyBest;
  27. self.locationManager.headingFilter = 0.5;
  28. self.loactionMaganger.delegate = self;
  29.  
  30. if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)])
  31. {
  32. [self.locationManager requestWhenInUseAuthorization];
  33. }
  34.  
  35. [self.locationManager startUpdatingHeading];
  36. }
  37.  
  38. (float)calculateAngleFromPoint:(CGPoint)cPosition toPoint:(CGPoint)toPoint
  39. {
  40. float angle;
  41.  
  42. float rotationAngle = 0;
  43. if (targetBeaconPosition.x != closestBeaconPosition.x)
  44. {
  45. rotationAngle = atan((-targetBeaconPosition.y + closestBeaconPosition.y) / (targetBeaconPosition.x - closestBeaconPosition.x));
  46.  
  47. if((targetBeaconPosition.x > closestBeaconPosition.x) && (targetBeaconPosition.y > closestBeaconPosition.y))
  48. {
  49. rotationAngle = rotationAngle + M_PI_2 + M_PI_4;
  50. }
  51.  
  52. if((targetBeaconPosition.x < closestBeaconPosition.x) && (targetBeaconPosition.y > closestBeaconPosition.y))
  53. {
  54. rotationAngle = rotationAngle + M_PI_4;
  55. }
  56.  
  57. if((targetBeaconPosition.x < closestBeaconPosition.x) && (targetBeaconPosition.y < closestBeaconPosition.y))
  58. {
  59. rotationAngle = rotationAngle + M_PI;
  60.  
  61. }
  62.  
  63. if((targetBeaconPosition.x > closestBeaconPosition.x) && (targetBeaconPosition.y < closestBeaconPosition.y))
  64. {
  65. rotationAngle = rotationAngle - M_PI_2 - M_PI_4;
  66. }
  67. }
  68.  
  69. if((targetBeaconPosition.x == closestBeaconPosition.x) && (targetBeaconPosition.y > closestBeaconPosition.y))
  70. {
  71. rotationAngle = -M_PI_2;
  72. }
  73. if((targetBeaconPosition.x == closestBeaconPosition.x) && (targetBeaconPosition.y < closestBeaconPosition.y))
  74. {
  75. rotationAngle = M_PI_2;
  76. }
  77. if((targetBeaconPosition.x > closestBeaconPosition.x) && (targetBeaconPosition.y == closestBeaconPosition.y))
  78. {
  79. rotationAngle = M_PI;
  80. }
  81. if((targetBeaconPosition.x < closestBeaconPosition.x) && (targetBeaconPosition.y == closestBeaconPosition.y))
  82. {
  83. rotationAngle = -M_PI;
  84. }
  85.  
  86. //Animation
  87. angle = -rotationAngle + M_PI_2;
  88.  
  89. return angle;
  90. }
  91.  
  92. func locationManager(manager: CLLocationManager!, didUpdateHeading newHeading: CLHeading!) -> (oldRad: Float, newRad: Float)
  93. {
  94. float oldRad = 0;
  95. float newRad = 0;
  96.  
  97. if(currentPosition != nil && targetPosition != nil && locationOrientation != nil)
  98. {
  99.  
  100. oldRad = -manager.heading.trueHeading * M_PI / 180.0f + oldAngle;
  101. newRad = -newHeading.trueHeading * M_PI / 180.0f + [self calculateAngleFromPoint:currentPosition toPoint:targetPosition];
  102. oldAngle = newRad;
  103. }
  104.  
  105. return (oldRad, newRad)
  106. // CABasicAnimation *theAnimation;
  107. // theAnimation=[CABasicAnimation animationWithKeyPath:@"transform.rotation"];
  108. // theAnimation.fromValue = [NSNumber numberWithFloat:oldRad];
  109. // theAnimation.toValue = [NSNumber numberWithFloat:newRad];
  110. // theAnimation.duration = 0.5f;
  111. //
  112. // [self.compassImage.layer addAnimation:theAnimation forKey:@"animateMyRotation"];
  113. // self.compassImage.transform = CGAffineTransformMakeRotation(newRad);
  114. }
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement