Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // TULNavigationManager.swift
- // TheUndergroundLocalizer
- //
- // Created by Przemyslaw Blasiak on 26.11.2014.
- // Copyright (c) 2014 bprzemyslaw. All rights reserved.
- //
- import UIKit
- class TULNavigationManager: NSObject, CLLocationManagerDelegate
- {
- var currentPosition: CGPoint?
- var targetPosition: CGPoint?
- var locationOrientation: Double?
- float oldAngle;
- //W TULNavigationManager.h daj @property(nonatomic, retain) CLLocationManager *locationMaganer;
- override init()
- {
- super.init()
- oldAngle = 0;
- self.locationManager = [[CLLocationManager alloc] init];
- self.locationMaganer.desiredAccuracy = kCLLocationAccuracyBest;
- self.locationManager.headingFilter = 0.5;
- self.loactionMaganger.delegate = self;
- if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)])
- {
- [self.locationManager requestWhenInUseAuthorization];
- }
- [self.locationManager startUpdatingHeading];
- }
- (float)calculateAngleFromPoint:(CGPoint)cPosition toPoint:(CGPoint)toPoint
- {
- float angle;
- float rotationAngle = 0;
- if (targetBeaconPosition.x != closestBeaconPosition.x)
- {
- rotationAngle = atan((-targetBeaconPosition.y + closestBeaconPosition.y) / (targetBeaconPosition.x - closestBeaconPosition.x));
- if((targetBeaconPosition.x > closestBeaconPosition.x) && (targetBeaconPosition.y > closestBeaconPosition.y))
- {
- rotationAngle = rotationAngle + M_PI_2 + M_PI_4;
- }
- if((targetBeaconPosition.x < closestBeaconPosition.x) && (targetBeaconPosition.y > closestBeaconPosition.y))
- {
- rotationAngle = rotationAngle + M_PI_4;
- }
- if((targetBeaconPosition.x < closestBeaconPosition.x) && (targetBeaconPosition.y < closestBeaconPosition.y))
- {
- rotationAngle = rotationAngle + M_PI;
- }
- if((targetBeaconPosition.x > closestBeaconPosition.x) && (targetBeaconPosition.y < closestBeaconPosition.y))
- {
- rotationAngle = rotationAngle - M_PI_2 - M_PI_4;
- }
- }
- if((targetBeaconPosition.x == closestBeaconPosition.x) && (targetBeaconPosition.y > closestBeaconPosition.y))
- {
- rotationAngle = -M_PI_2;
- }
- if((targetBeaconPosition.x == closestBeaconPosition.x) && (targetBeaconPosition.y < closestBeaconPosition.y))
- {
- rotationAngle = M_PI_2;
- }
- if((targetBeaconPosition.x > closestBeaconPosition.x) && (targetBeaconPosition.y == closestBeaconPosition.y))
- {
- rotationAngle = M_PI;
- }
- if((targetBeaconPosition.x < closestBeaconPosition.x) && (targetBeaconPosition.y == closestBeaconPosition.y))
- {
- rotationAngle = -M_PI;
- }
- //Animation
- angle = -rotationAngle + M_PI_2;
- return angle;
- }
- func locationManager(manager: CLLocationManager!, didUpdateHeading newHeading: CLHeading!) -> (oldRad: Float, newRad: Float)
- {
- float oldRad = 0;
- float newRad = 0;
- if(currentPosition != nil && targetPosition != nil && locationOrientation != nil)
- {
- oldRad = -manager.heading.trueHeading * M_PI / 180.0f + oldAngle;
- newRad = -newHeading.trueHeading * M_PI / 180.0f + [self calculateAngleFromPoint:currentPosition toPoint:targetPosition];
- oldAngle = newRad;
- }
- return (oldRad, newRad)
- // CABasicAnimation *theAnimation;
- // theAnimation=[CABasicAnimation animationWithKeyPath:@"transform.rotation"];
- // theAnimation.fromValue = [NSNumber numberWithFloat:oldRad];
- // theAnimation.toValue = [NSNumber numberWithFloat:newRad];
- // theAnimation.duration = 0.5f;
- //
- // [self.compassImage.layer addAnimation:theAnimation forKey:@"animateMyRotation"];
- // self.compassImage.transform = CGAffineTransformMakeRotation(newRad);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement