ios - 尝试预加载谷歌地图 View
<p><p>我在导航 Controller 内的 ViewController 中有一个谷歌地图 View ,该导航 Controller 位于标签栏 Controller 上。一切正常,但当我最初点击“ map ”选项卡时, map 上的加载时间为 5-10 秒。</p>
<p> <img src="/image/GoSPJ.png" alt="storyboard-layout"/> </p>
<p>我遇到过几篇 StackOverflow 帖子,其中列出了以下预加载选项卡的方法:</p>
<pre><code>for (UIViewController *viewController in self.tabBarController.viewControllers)
{
;
}
</code></pre>
<p>我已将其修改为我的特定实现。</p>
<pre><code>for (UIViewController *viewController in self.tabBarController.viewControllers)
{
UINavigationController *navCon = (UINavigationController*)viewController;
for (UIViewController *vc in navCon.viewControllers) {
if ([isEqual: @"MapViewController"]){
MapViewController *mv = (MapViewController*) vc;
;
}
}
}
</code></pre>
<p>不幸的是,这两种实现都没有预加载 map 选项卡。 </p>
<p>规范</p>
<ul>
<li>谷歌地图 SKD 1.7.2</li>
<li>iOS SDK 7.1</li>
</ul>
<p><strong>编辑</strong> MapViewController.m 上的 ViewDidLoad</p>
<pre><code>- (void)viewDidLoad
{
;
mapView_ = ;
mapView_.delegate = self;
AppDelegate *appDelegate=(AppDelegate *).delegate;
CLLocationCoordinate2D loc=appDelegate.locationManager.location.coordinate;
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:loc.latitude
longitude:loc.longitude
zoom:12];
;
mapView_.myLocationEnabled=YES;
mapView_.settings.myLocationButton = YES;
self.view = mapView_;
}
</code></pre></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>我建议只使用容器 View (长 <a href="https://stackoverflow.com/a/23403979/294884" rel="noreferrer noopener nofollow">how-to</a> ),这很容易;然后它将可靠地独立工作。如果您愿意,只需在加载时将其移出屏幕即可(也许之后将其滑入)。</p>
<p>请注意,在容器 View 中,假设“父级”属于 Boss 类,</p>
<pre><code>@implementation SomeContaineredView
-(void)allTheDataLoaded
{
[(Boss*)self.parentViewController someMethodInBoss];
}
@end
</code></pre>
<p>与父类对话就是这么简单。</p>
<hr/>
<p>注意 - 如果您需要 <strong>从父 View 到容器 View </strong>,如果您知道 Apple 让您做的“愚蠢的把戏”,这将非常容易.. <a href="https://stackoverflow.com/a/15706092/294884" rel="noreferrer noopener nofollow">https://stackoverflow.com/a/15706092/294884</a> </p>
<p>这有点古怪,对于这样一个基本的操作,你一直都做得很好。你在 prepareForSegue 中这样做:像这样......</p>
<pre><code>-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ()
self.vcLogin = (LoginVC *)segue.destinationViewController;
if ()
self.vcStartNew = (StartNewVC *)segue.destinationViewController;
}
</code></pre>
<p>在示例中,有两个容器 View 。 (使用标识符“containerLogin”和“containerStartNew”)所以,我有两个属性(self.vcLogin、self.vcStartNew)。这正是您设置它们的方式。</p>
<p>请注意,<strong>prepareForSegue</strong> 名称错误。它应该被称为 <strong>“当你有一个嵌入 segue 时运行的设置”</strong> 我在这里详细解释一下:<a href="https://stackoverflow.com/a/24351813/294884" rel="noreferrer noopener nofollow">https://stackoverflow.com/a/24351813/294884</a> </p>
<h1>重要! ...</h1>
<h1>这是一个方便的宏!!!</h1>
<pre><code>#define seg(A, B, C) if () \
B = (C *)segue.destinationViewController;
</code></pre>
<p>在我们从事的每个项目中,我们都会使用该宏。</p>
<p>那么你就可以这么写了:</p>
<pre><code>-(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);
}
</code></pre>
<p>因为,如今,每个场景都有许多容器 View ,我们拥有的每个场景,对于每个客户,在“prepareForSegue”调用中都有该代码。</p>
<p>因此,一旦该代码运行,您终于可以“访问您的容器 View !”</p>
<pre><code>;
self.cars.view.hidden=YES;
;
</code></pre>
<p>...等等。</p>
<p>就像我说的,我们在每个项目中都使用这个宏。现在几乎每个场景都有一些容器 View ,所以它在每个 VC 中!希望它可以帮助某人。</p></p>
<p style="font-size: 20px;">关于ios - 尝试预加载谷歌地图 View ,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/25985186/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/25985186/
</a>
</p>
页:
[1]