gpt4 book ai didi

ios - 尝试预加载 Google map View

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:42:16 26 4
gpt4 key购买 nike

我在标签栏 Controller 上的导航 Controller 内的 View Controller 中有一个 Google map View 。一切正常,但当我最初点击“ map ”选项卡时, map 上的加载时间范围为 5-10 秒。

storyboard-layout

我看过几篇 StackOverflow 帖子,其中列出了以下预加载选项卡的方法:

for (UIViewController *viewController in self.tabBarController.viewControllers)
{
[viewController view];
}

我已将其修改为我的特定实现。

for (UIViewController *viewController in self.tabBarController.viewControllers)
{
UINavigationController *navCon = (UINavigationController*)viewController;
for (UIViewController *vc in navCon.viewControllers) {
if ([[NSString stringWithFormat:@"%@",vc.class] isEqual: @"MapViewController"]){
MapViewController *mv = (MapViewController*) vc;
[mv view];
}

}
}

不幸的是,这两个实现都没有预加载 map 选项卡。

规范

  • 谷歌地图 SKD 1.7.2
  • iOS SDK 7.1

编辑 MapViewController.m 上的ViewDidLoad

- (void)viewDidLoad
{
[super viewDidLoad];
mapView_ = [GMSMapView mapWithFrame:self.view.bounds camera:nil];
mapView_.delegate = self;
AppDelegate *appDelegate=(AppDelegate *)[UIApplication sharedApplication].delegate;
CLLocationCoordinate2D loc=appDelegate.locationManager.location.coordinate;

GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:loc.latitude
longitude:loc.longitude
zoom:12];
[mapView_ setCamera:camera];
mapView_.myLocationEnabled=YES;
mapView_.settings.myLocationButton = YES;
self.view = mapView_;
}

最佳答案

我建议只使用容器 View (长 how-to ),这非常简单;然后它将可靠地独立工作。如果您愿意,只需在加载时将其移出屏幕(也许之后再将其滑入)。

请注意,在容器 View 中,假设“父级”属于 Boss 类,

@implementation SomeContaineredView
-(void)allTheDataLoaded
    {
    [(Boss*)self.parentViewController someMethodInBoss];
    }
@end

和父类对话就是这么简单。


注意 - 如果您需要从父 View 到容器 View 进行通信,如果您知道 Apple 让您执行的“愚蠢的把戏”,这将非常容易...... https://stackoverflow.com/a/15706092/294884

这有点古怪,对于这样的基本操作,您一直都做得很好。你在 prepareForSegue 中这样做:像这样......

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"containerLogin"])
self.vcLogin = (LoginVC *)segue.destinationViewController;

if ([segue.identifier isEqualToString:@"containerStartNew"])
self.vcStartNew = (StartNewVC *)segue.destinationViewController;

}

示例中有两个容器 View 。 (使用标识符“containerLogin”和“containerStartNew”)因此,我有两个属性(self.vcLogin、self.vcStartNew)。这正是您设置它们的方式。

请注意,prepareForSegue 的命名有误。它应该被称为类似“当你有一个嵌入转场时运行的设置” 我在这里详细解释:https://stackoverflow.com/a/24351813/294884

重要! ...

这是一个方便的宏!!!

#define seg(A, B, C) if ([segue.identifier isEqualToString:A]) \
B = (C *)segue.destinationViewController;

在我们从事的每个项目中,我们都会使用该宏。

那么你可以简单地这样写:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
seg(@"cOverlayBuy", self.rockets, Rockets);
seg(@"cOverlayMainMenu", self.overlayMainMenu, OverlayMainMenu);

seg(@"cSearch", self.search, Search);
seg(@"cMeeting", self.meeting, Meeting);

seg(@"cMeetings", self.meetings, Meetings);
seg(@"cBooks", self.bikes, Bikes);
seg(@"cPeople", self.cars, Cars);
}

因为如今,每个场景都有许多容器 View ,我们拥有的每个场景,对于每个客户端,在“prepareForSegue”调用中都有该代码。

因此,一旦该代码运行,您终于可以“访问您的容器 View !”

[self.cars displayColors:@"red"];
self.cars.view.hidden=YES;
[self.meetings calculateNewTimesNow];

...等等。

就像我说的,我们在每个项目中都使用这个宏。现在几乎每个场景都有一些容器 View ,所以它在每个 VC 中!希望对某人有所帮助。

关于ios - 尝试预加载 Google map View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25985186/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com