ViewController segues to MapViewContoller:第一次打开MapView区域错误

时间:2013-01-27 00:23:28

标签: mkmapview segue

晚上好, 当用户在ViewController上按下Bar按钮时,我遇到了加载MapView的应用程序的问题。 MapViewController被加载并且Map显示正确的注释(未在源代码中显示),但是第一次启动App并打开MapView时startregion是错误的。当我按下Back按钮一次并重新打开MapView时,startregion很好。它只是第一次不起作用。

日志为我提供了从plist加载的正确值: 47.572132和7.579397

自从我两周前开始编写objective-c编码以来,请尽可能简单地保持您的答案; - )

h.File:

#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
#import <CoreLocation/CoreLocation.h>
#import "DetailViewController.h"
#import "Annotation.h"


@interface MapViewController : UIViewController<CLLocationManagerDelegate> {
    IBOutlet MKMapView *singlemapview;
}

@property (nonatomic, retain) NSArray *data;
@property int selectedBuilding;
@property (strong, nonatomic) CLLocationManager *location;
@property float longitude;
@property float latitude;
@end

m.File:

#import "MapViewController.h"

@interface MapViewController ()
@end

@implementation MapViewController
@synthesize data;
@synthesize selectedBuilding;
@synthesize location, latitude, longitude;

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSDictionary *dataItem = [data objectAtIndex:selectedBuilding];

    latitude = [[dataItem objectForKey:@"Latitude"] floatValue];
    longitude = [[dataItem objectForKey:@"Longitude"] floatValue];

    NSLog (@"%f",latitude);
    NSLog (@"%f",longitude);

    MKCoordinateRegion startregion = { {0.0, 0.0}, {0.0, 0.0} };
    startregion.center.latitude = latitude;
    startregion.center.longitude = longitude;
    startregion.span.latitudeDelta = 0.005;
    startregion.span.longitudeDelta = 0.005;

    [singlemapview setMapType:MKMapTypeSatellite];
    [singlemapview setZoomEnabled:YES];
    [singlemapview setScrollEnabled:YES];

    [singlemapview addAnnotation:singlebuilding];
    [singlemapview setRegion:startregion];

}

2 个答案:

答案 0 :(得分:2)

在viewDidLoad或viewWillAppear中调用setRegion方法时,我的应用程序具有完全相同的行为。但是,在viewDidAppear中调用它可以纠正这个问题。希望这有帮助。

答案 1 :(得分:0)

我现在可以使用-(void)viewWillAppear:(BOOL)animated功能而不是-(void)viewDidLoad来解决我的问题

据我所知:

    在打开新视图之前(在segue动画开始之前)调用
  • ViewDidLoad一次。但是,正确绘制地图仍然为时已晚。
  • 每次在屏幕上显示视图后(在segue动画结束后)都会调用
  • ViewDidAppear
  • 在打开新视图之前(在segue动画之前)完全调用并计算
  • ViewWillApper。这就是为什么当你有一张地图时它能正常工作的原因。