0

目前,我正在使用为我的项目SWRevealViewController创建侧边栏。google map api

https://github.com/John-Lluch/SWRevealViewController

这就是问题所在。ViewControllers每次我在使用侧边栏和返回到MapViewControllerwhich contains之间切换GMSMapView时,GMSMapView都会重新加载到我的位置(我在我的viewDidLoad方法中设置它)。

我怎样才能防止MapViewController每次重新加载?


到目前为止我已经尝试过:使MapViewController成为单例并将其设置为destinationViewController但它不起作用。我得到的只是黑屏。

我的代码custom segue

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{

    if ( [segue isKindOfClass: [SWRevealViewControllerSegue class]] )
    {
        SWRevealViewControllerSegue* rvcs = (SWRevealViewControllerSegue*) segue;
        SWRevealViewController* rvc = self.revealViewController;

        rvcs.performBlock = ^(SWRevealViewControllerSegue* rvc_segue, UIViewController* svc, UIViewController* dvc)
        {
            if ([segue.identifier isEqualToString:@"SegueToMapViewController"])
            {
                dvc = [MapViewController sharedMap]; //singleton
            }
            UINavigationController* nc = [[UINavigationController alloc] initWithRootViewController:dvc];
            [nc setNavigationBarHidden:YES];
            [nc setToolbarHidden:YES];
            [rvc setFrontViewController:nc animated:YES];
        };
    }
}
4

2 回答 2

0

确保不要在viewWillAppear或中更改地图相机位置viewDidAppear

如果不是这种情况,您可以在离开视图控制器之前保存相机位置,并在控制器再次显示时恢复它。

于 2014-04-11T09:41:05.750 回答
0

您的问题已经有一段时间了,但是这些天我遇到了类似的问题,我想我找到了保留状态的方法GMSMapView(尽管我不知道是否SWRevealViewController会做出任何改变)。

正如你所说,这个想法是有一个“单例”,但我不是为GMSMapView. 尝试通过创建根的子类来创建GMSMapView根的 a 属性,UINavigationController并在子类的 上初始化映射ViewDidLoad

界面:

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

@interface TEST1NavigationController : UINavigationController

@property GMSMapView *mapView;

@end

班级:

#import "TEST1NavigationController.h"

...

@implementation TEST1NavigationController

    - (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:40.7056308
                                                       longitude:-73.9780035
                                                            zoom:15];

    self.mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];
    self.mapView.myLocationEnabled = YES;
}

...

然后,在每个单独的控制器中,您可以向自定义导航控制器询问GMSMapView并使用它。

#import "TESTMAP1ViewController.h"
#import "TEST1NavigationController.h"

@interface TESTMAP1ViewController ()

@end

@implementation TESTMAP1ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    //Retrieve the mapView and assign it to the main view
    self.view = [self mapView];

    // Creates a marker in the center of the map.
    GMSMarker *marker = [[GMSMarker alloc] init];
    marker.position = CLLocationCoordinate2DMake(40.7056308,-73.9780035);
    marker.title = @"Sometitle";
    marker.snippet = @"Sometext";
    marker.map = [self mapView];

}

-(GMSMapView*)mapView{
    //Returns the view from the Navigation Controller
    return [((TEST1NavigationController*)[self navigationController]) mapView];
}

...

这样,状态应该保存在导航控制器的控制器中。

于 2014-07-24T23:20:27.797 回答