- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个 3 选项卡的 iPhone 应用程序,我希望每个选项卡的 View 看起来共享相同的 map 。所以目前,我只是想弄清楚当单击新选项卡时如何重置每个 View 的 MKMapView 区域。 [换句话说,如果您在选项卡 1 上并一直放大某个点,那么单击选项卡 2,我希望它显示相同的放大 map 。]
为了做到这一点,我在应用程序委托(delegate)中有一个 MKCooperativeRegion,每个 View 在消失之前都会保存到该区域,并且每个新 View 都会在查看之前读取。
[换句话说,我的应用程序委托(delegate)是我的 TabBarControllerDelegate,并且我已经覆盖了 tabBarController:shouldSelectViewController:。在有人单击选项卡按钮之后、新选项卡 View 的 viewWillAppear: 函数被调用之前调用此函数。因此,在这个函数中,我将当前 View 的区域保存到 AppDelegate::MKCooperativeRegion 变量中,然后让新 View 的 viewWillAppear: (或 viewDidLoad:) 被调用。然后,在新 View 的 viewWillAppear: 中,我从应用程序委托(delegate)获取 MKCooperativeRegion,并将其分配给我的新 View 的区域。]
但是,MKMapKit::setRegion: 中的值似乎并不一致,我不知道我是否只是做错了什么、完全遗漏了某些内容,或者是否发生了其他情况。
我只从事 iPhone 开发。 (以及 Obj-c 等)已经大约两周了,所以这很可能只是一个新错误。如果是这样,我现在就为浪费您的时间而道歉。尽管如此,这里有一些代码(我已经在我正在使用的注释中留下了......以防万一您尝试自己运行它):
iPhoneTestAppDelegate.h
...
@interface iPhoneTestAppDelegate : NSObject
{
UIWindow* _window;
UITabBarController* _tabBarController;
SubViewController* _subViewController;
MKCoordinateRegion _mapRegion;
}
@property (nonatomic, retain) IBOutlet UIWindow* window;
@property (nonatomic, retain) IBOutlet UITabBarController* tabBarController;
@property (nonatomic, retain) IBOutlet SubViewController* subViewController;
@property (nonatomic, assign) MKCoordinateRegion mapRegion;
@end
iPhoneAppDelegate.m
...
static CLLocationDegrees INITIAL_LATITUDE = 40.754019;
static CLLocationDegrees INITIAL_LONGITUDE = -73.973351;
static CLLocationDegrees INITIAL_SPAN_LAT_DEG = .10767;
static CLLocationDegrees INITIAL_SPAN_LONG_DEG = .109863;
...
- (void)applicationDidFinishLaunching:(UIApplication *)application
{
NSLog(@"Begin");
// initialize the delegate's region
MKCoordinateRegion region = {{0.0f, 0.0f}, {0.0f, 0.0f}};
region.center.latitude = INITIAL_LATITUDE;
region.center.longitude = INITIAL_LONGITUDE;
region.span.latitudeDelta = INITIAL_SPAN_LAT_DEG;
region.span.longitudeDelta = INITIAL_SPAN_LONG_DEG;
self.mapRegion = region;
self.tabBarController.delegate = self;
[self.window addSubview:self.tabBarController.view];
}
- (BOOL)tabBarController:(UITabBarController *)tabBarController
shouldSelectViewController:(UIViewController *)viewController
{
NSLog(@"in UITabBarControllerDelegate: shouldSelectViewController:");
if([tabBarController.viewControllers indexOfObject:viewController] !=
[tabBarController selectedIndex])
{
NSLog(@"different view selected");
BaseViewController* currView = (BaseViewController *)[tabBarController selectedViewController];
NSLog(@"%f %f %f %f",
self.mapRegion.center.latitude, self.mapRegion.center.longitude,
self.mapRegion.span.latitudeDelta, self.mapRegion.span.longitudeDelta);
NSLog(@"%f %f %f %f",
currView.mapView.region.center.latitude, currView.mapView.region.center.longitude,
currView.mapView.region.span.latitudeDelta, currView.mapView.region.span.longitudeDelta);
self.mapRegion = currView.mapView.region;
NSLog(@"%f %f %f %f",
self.mapRegion.center.latitude, self.mapRegion.center.longitude,
self.mapRegion.span.latitudeDelta, self.mapRegion.span.longitudeDelta);
}
else
NSLog(@"same view selected");
return YES;
}
BaseViewController.m
...
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"Base: viewDidLoad");
iPhoneTestAppDelegate* appDelegate = (iPhoneTestAppDelegate *)
[[UIApplication sharedApplication] delegate];
[self.mapView setDelegate:self];
//[self.mapView setRegion:appDelegate.mapRegion animated:YES];
[self.mapView setRegion:[self.mapView regionThatFits:appDelegate.mapRegion]];
NSLog(@"---------------------");
NSLog(@"%f %f %f %f",
appDelegate.mapRegion.center.latitude, appDelegate.mapRegion.center.longitude,
appDelegate.mapRegion.span.latitudeDelta, appDelegate.mapRegion.span.longitudeDelta);
NSLog(@"---------------------");
NSLog(@"%f %f %f %f",
self.mapView.region.center.latitude, self.mapView.region.center.longitude,
self.mapView.region.span.latitudeDelta, self.mapView.region.span.longitudeDelta);
NSLog(@"---------------------");
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
NSLog(@"Base: viewWillAppear");
iPhoneTestAppDelegate* appDelegate = (iPhoneTestAppDelegate *)
[[UIApplication sharedApplication] delegate];
//[self.mapView setRegion:appDelegate.mapRegion animated:YES];
[self.mapView setRegion:[self.mapView regionThatFits:appDelegate.mapRegion]];
NSLog(@"*********************");
NSLog(@"%f %f %f %f",
appDelegate.mapRegion.center.latitude, appDelegate.mapRegion.center.longitude,
appDelegate.mapRegion.span.latitudeDelta, appDelegate.mapRegion.span.longitudeDelta);
NSLog(@"*********************");
NSLog(@"%f %f %f %f",
self.mapView.region.center.latitude, self.mapView.region.center.longitude,
self.mapView.region.span.latitudeDelta, self.mapView.region.span.longitudeDelta);
NSLog(@"*********************");
}
...
现在,当我运行此命令时,我注意到的第一件事是,当调用初始 View 的 viewDidLoad: 时,委托(delegate)的区域和我的新 View 的区域是相同的(在我调用 setRegion: 之后)。但是,在 viewWillAppear: 中调用 setRegion: 后,我的 View 的 MKMapView 区域不再等于委托(delegate)。不知何故, viewDidLoad: 中完全相同的代码在 viewWillAppear: 中运行时会产生不同的结果!不应该是这样吗?为什么从 viewWillAppear: 调用 setRegion: 会更改我的 View MKMapView 区域的值?这与内部调用regionThatFits:有关系吗?我不明白!
但是,我觉得如果我能解决这一部分,我也许就能解决其他问题;所以,我不会在这里详细介绍。但是,如果你制作一个快速应用程序。有了这些函数并运行它,你就会发现问题。主要是, View 的 map 偶尔会同步,但是当您缩放和移动(并在选项卡之间不断切换)时,跨度开始缩小,并且每次按下新选项卡都会使我越来越远。
注意:我只在模拟器(3.0)上运行这个[我还没有硬件],所以我不知道这是否与它有关。但是,我有点怀疑。
无论如何,感谢您提供的任何帮助。我真的很感激。
最佳答案
我正在解决类似的问题,围绕一组点实现缩放以适应功能。目前我能给您的唯一帮助是,是的,regionThatFits: 实际上是在内部调用的。我用一个精确适合所有点的区域来调用 setRegion,因此应该有一个点正好位于每边的边缘,以及可视区域内的点。在调用 setRegion 后,mapview 实际拥有的区域是不同的,但与我调用regionThatFits: 和我想要使用的区域时得到的区域完全相同。该区域通常比我想要的要大一些。
我一直在研究这个问题,其理论是,regionThatFits 只是试图捕获宽高比,并且搞砸了宽高比校正。然而,有两件事似乎表明这并不是唯一发生的事情:首先,regionThatFits 返回的区域的纵横比与 map View 的纵横比不相同。其次,当我使用自己的宽高比校正代码来获取与regionThatFits输出完全相同的宽高比时,我仍然从regionThatFits(和mapView)中得到错误的大区域。
到目前为止,MapKit 相当令人恼火。
关于iphone - MKMapView setRegion : odd behavior?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1365417/
是否有办法获得一个 Behavior t [a],其中时间 t 时 [a] 的值是 Behavior t [Behavior t a] 中包含的值> 在时间 t?即,具有以下类型的函数: Behavi
(问题最初是由对 Are there race conditions in this producer-consumer implementation? 的回答下的评论提示的,但这里严格从 C 语言的
摘自本文:http://www-public.int-evry.fr/~gibson/Teaching/CSC7322/ReadingMaterial/Wegner87.pdf 它定义类型: type
阅读Akka 2.6.10 API Docs ,akka.actor.typed.scaladsl.Behaviors.setup 和 akka.actor.typed.scaladsl.Behavi
我从 easymock 和 JUnit 测试用例中得到了一些无法解释的行为。我收到 IllegalStateException:缺少前面方法调用的行为定义:myCollaborator.getCurr
在 akka typed 中,我们有行为的概念。 如果我们想保留 Actor 的相同行为,我们会在处理完一条消息后返回 Behaviors.same。但是我们也可以返回这个。两者有何不同? 最佳答案
我正在 Kubernetes 中创建一个 HorizontalPodAutoscaler,我需要将缩减稳定窗口配置为小于默认值。使用的代码和错误如下: apiVersion: autoscalin
在 Python 中,为什么 [:] 切片操作的行为不一致? 它对于列表和字符串的行为有所不同。 对于列表,它给出一个副本列表对象,对于字符串,它给出相同的字符串对象。 我觉得这令人困惑,违反直觉。有
我需要将一些对象存储到数据库中。 首先 我将它们存储在内存中(存储在集合中) 当其中一个正确存储在数据库中时,我会将其删除 所以, public class AuditService { pr
下面的程序 (prog1) 抛出 OutOfMemoryError 错误。确实如此。但如果我在第 5 行(prog2)下方添加 sysout,它不会抛出错误。这种奇怪的行为有什么原因吗? 程序1: p
我有以下二叉搜索树(在 C++ 中),我对特定代码行有疑问: delete k; 如果我删除该行,我的代码可以正常工作,但我不明白为什么。据我了解:来自 k 的数据被插入到树中,然后变量 k 被删除。
我想知道如果我尝试对已删除或可能尚未分配的指针执行 delete 会发生什么?我读过两件事:第一,delete 运算符会做一些检查,我们不需要检查指针是否为空;然后,我读到它会导致未知的行为.. 我在
我无法解释 Scala 集合的这种行为。 让我们从一些定义开始。 import scala.collection.mutable.Set case class Item(name: String, c
我一直在尝试在 wpf 窗口上实现一种行为,因此我在当前的解决方案中添加了对 System.Winodws.Interactivity 的引用,然后编写了所需的行为。但为了应用这种行为,我必须在 Wi
我试图理解 rdpmc 指令。因此,我有以下 asm 代码: segment .text global _start _start: xor eax, eax mov ebx, 10
我正在关注这里的测试:https://github.com/plone/plone.app.referenceablebehavior/blob/master/plone/app/referencea
行为(方法体)可以是状态机或事件 - 事件很容易理解,因为它们等同于过程代码。 我不明白状态机如何用作操作的行为? 您能为此提供一个简单的示例吗? ---注意--- Operation 是一个仅规范元
我正在尝试在 Cocoa 应用程序中实现自定义终止行为。通常,当我的应用程序正常退出时,它会执行最终运行时数据库清理,然后退出。每当调用 [NSApp Terminate:aSender] 时,都会在
这里没什么太严肃的,只是好奇。 我想举个例子,想出了这段代码: const { Observable, Subject } = Rx const timeout$ = new Subject() co
我希望类中的方法在 IO 线程上运行一些代码,但只有当它们订阅的主题具有特定值时。然后调用者应该在 Android UI 线程上收到响应。 类似这样的事情: public class MyClass
我是一名优秀的程序员,十分优秀!