Заголовок CLLocation всегда -1 - PullRequest
0 голосов
/ 24 февраля 2011

Эй, ребята, я пытаюсь создать приложение, которое будет использовать компас, чтобы указывать в направлении заданного местоположения, но сейчас я пытаюсь понять, как сделать базовый компас.Я следовал руководству, однако я всегда получаю «-1» в качестве заголовка, и только один раз заставляю его работать, и с тех пор я не менял код.Любые идеи будут полезны.

#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>

@interface TrackerViewController : UIViewController <CLLocationManagerDelegate> {

}

@property (nonatomic, retain) CLLocationManager *locationManager;
@property (nonatomic, retain) IBOutlet UISwitch *toggle;
@property (nonatomic, retain) IBOutlet UIImageView *compass;
@property (nonatomic, retain) IBOutlet UILabel *headingLabel;

-(IBAction)toggleSwitch;

@end

и файл реализации ...

#import "TrackerViewController.h"


@implementation TrackerViewController

@synthesize locationManager; 
@synthesize toggle; 
@synthesize compass; 
@synthesize headingLabel;

- (IBAction)toggleSwitch {
if(self.toggle.isOn) {
    [self.locationManager startUpdatingHeading];
} else {
    [self.locationManager stopUpdatingHeading];
}
}

- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];

if ([CLLocationManager headingAvailable]) {
    self.locationManager = [[[CLLocationManager alloc] init] autorelease]; 
    self.locationManager.delegate = self;
} else {
    [[[[UIAlertView alloc] initWithTitle:@"Aw snap!" 
                                 message:@"Device doesn't support heading updates" 
                                delegate:nil 
                       cancelButtonTitle:@"OK" 
                       otherButtonTitles:nil] autorelease] show];   
}
}

- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading 
*)newHeading {
float heading = [newHeading trueHeading] * M_PI / 180.0;
self.compass.transform = CGAffineTransformMakeRotation(-heading);
self.headingLabel.text = [NSString stringWithFormat:@"%d°", (int)[newHeading trueHeading]];
NSLog(@"%d", (int)[newHeading trueHeading]);
}


- (void)locationManager:(CLLocationManager *)manager 
   didFailWithError:(NSError *)error {

//  NSLog(@"Error!");

if (error.code == kCLErrorDenied) {
    [[[[UIAlertView alloc] initWithTitle:@"Aw snap!" 
                                 message:@"User didn't allow heading updates" 
                                delegate:nil 
                       cancelButtonTitle:@"OK" 
                       otherButtonTitles:nil] autorelease] show];
    self.toggle.on = NO;
    [self.locationManager stopUpdatingHeading];
}
}


- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];

// Release any cached data, images, etc that aren't in use.
}

- (void)viewDidUnload {
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}


- (void)dealloc {
self.locationManager = nil;
self.compass = nil;
self.toggle = nil;
self.headingLabel = nil;
[super dealloc];
}

@end

1 Ответ

0 голосов
/ 16 марта 2011

MagneticHeading Значение в этом свойстве представляет курс относительно Северного магнитного полюса, который отличается от географического Северного полюса.Значение 0 означает, что устройство направлено на магнитный север, 90 означает, что оно направлено на восток, 180 означает, что оно направлено на юг и т. Д.Значение в этом свойстве всегда должно быть допустимым.

...