アプリが読み込まれると、Mapview が正常に読み込まれます。
次に、ビューを変更して最初にメイン ビューに戻り、viewDidAppear が初期化された後、Mapview が正常に読み込まれます。
しかし、viewDidAppear の最初のインスタンスの後、mapview マップが読み込まれず、背景が黄色になります。mapview マップが再び表示される前に、アプリを再起動する必要があります。
これは、ビューを変更するときにマップビューを適切に解放していないためですか? ARCを使用しています。
編集(katzenhut):OPはこのコードをコメントに投稿しました:Appdelegate.m
if(self.locationManager==nil){
_locationManager=[[CLLocationManager alloc] init];
_locationManager.delegate=self;
self.locationManager = _locationManager;
}
Viewcontroller.m
- (void)viewDidAppear:(BOOL)animated{
[self setValuesFromPreferences];
appDelegate.refresh = FALSE;
theMapView.showsUserLocation = YES;
[theMapView setCenterCoordinate:appDelegate.locationManager.location.coordinate zoomLevel:zoom animated:YES];
[super viewDidAppear:animated];
}
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{
[theMapView setCenterCoordinate: appDelegate.locationManager.location.coordinate zoomLevel:zoom animated: YES];
}
Mapviewcontroller.m
#import "MapViewController.h"
@implementation MapViewController
@synthesize theMapView;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
appDelegate = (theAppDelegate *)[UIApplication sharedApplication].delegate;
[super viewDidLoad];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
- (void)viewDidAppear:(BOOL)animated
{
theMapView.showsUserLocation = YES;
pendingRegionChange = YES;
isTracking = YES;
[theMapView setCenterCoordinate:appDelegate.locationManager.location.coordinate zoomLevel:14 animated:YES];
[super viewDidAppear:animated];
}
-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
if( isTracking )
{
pendingRegionChange = YES;
[theMapView setCenterCoordinate:appDelegate.locationManager.location.coordinate zoomLevel:14 animated:YES];
}
}
-(void) mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
{
if( isTracking && ! pendingRegionChange )
{
isTracking = NO;
}
pendingRegionChange = NO;
}
@end
viewcontroller.m の次のコードの問題を解決しました。
- (void)viewDidDisappear:(BOOL)animated{
[timer invalidate];
}