为了设置外部服务器的查询,我想在我正在构建的iPhone应用程序中获取当前Map View的边界.UIView应该响应边界,但似乎MKMapView没有.设置区域并放大地图后,我尝试获取边界.我坚持第一步,试图获得代表地图SE和NW角落的CGPoints.之后我打算用:
- (CLLocationCoordinate2D)convertPoint:(CGPoint)point toCoordinateFromView:(UIView *)view
Run Code Online (Sandbox Code Playgroud)
将点转换为地图坐标.但我甚至无法做到那么远......
//Recenter and zoom map in on search location
MKCoordinateRegion region = {{0.0f, 0.0f}, {0.0f, 0.0f}};
region.center = mySearchLocation.searchLocation.coordinate;
region.span.longitudeDelta = 0.01f;
region.span.latitudeDelta = 0.01f;
[self.mapView setRegion:region animated:YES];
//After the new search location has been added to the map, and the map zoomed, we need to update the search bounds
//First we need to calculate the corners of the map
CGPoint se = CGPointMake(self.mapView.bounds.origin.x, mapView.bounds.origin.y);
CGPoint nw = CGPointMake((self.mapView.bounds.origin.x + mapView.bounds.size.width), (mapView.bounds.origin.y + mapView.bounds.size.height)); …
Run Code Online (Sandbox Code Playgroud) 我想在我的MKMapView上设置一个区域,然后找到与地图的NE和SW角对应的坐标.
This code works just fine to do that:
//Recenter and zoom map in on search location
MKCoordinateRegion region = {{0.0f, 0.0f}, {0.0f, 0.0f}};
region.center = mySearchLocation.searchLocation.coordinate;
region.span.longitudeDelta = 0.01f;
region.span.latitudeDelta = 0.01f;
[self.mapView setRegion:region animated:NO]; //When this is set to YES it seems to break the coordinate calculation because the map is in motion
//After the new search location has been added to the map, and the map zoomed, we need to update the search bounds
//First we need …
Run Code Online (Sandbox Code Playgroud) 我想我缺少一些基本的东西,所以我想向社区寻求帮助.我正在构建一个基于iPhone实用程序基本应用程序的应用程序.我的MainView和FlipsideView共享一些元素,所以我为这些片段创建了单独的ViewControllers和nib文件.为了做到这一点,我做了以下工作:1.创建了一个名为searchDateViewController的viewcontroller,它是searchDateView.xib的文件所有者2. searchDateView.xib基本上是一个内部有UILabel的UIView,视图连接正确3.里面MainViewController.m和FlipsideViewController.m我将子视图添加为folllows:
- (void)loadView{
[super loadView];
searchDateViewController = [[SearchDateViewController alloc] initWithNibName:@"SearchDateView" bundle:nil];
[[searchDateViewController view] setFrame:[searchDateView frame]];
[[self view] addSubview:[searchDateViewController view]];
...
}
Run Code Online (Sandbox Code Playgroud)
一切都显示和工作得很好.基本上取决于每个主视图和翻转视图中发生的动作,笔尖的UILabel被更改.但是,如果从MainView或FlipsideView加载searchDateViewController,我想做一些稍微不同的事情.但是,我似乎无法弄清楚哪个ViewController正在添加searchDateViewController子视图.
在searchDateViewController中,我试过:
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"superview %@", self.view.superview);
NSLog(@"parentviewcontroller %@", self.parentViewController);
}
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,我都没有.
所以我的问题是 - 我能找出哪个ViewController正在添加searchDateViewController一个子视图?如果是这样的话?或者,如果我的逻辑完全搞砸了,我该怎么做呢?
谢谢!
我正在打开一个新问题来跟进我的最后一个问题(在添加子视图后,superview和parentviewcontroller为nil).基本上我认为使用子视图是一个好主意,但我不应该有一个ViewController控制住在另一个ViewController内的子视图.基本上我想做以下...我有两个ViewControllers共享一个共同的子视图.我已经将该子视图创建为一个名为SearchDate.xib的笔尖.文件所有者是相应的类SearchDateView.m/h.该类有一个出口,用于nib中UIView内部唯一的元素,它是一个标签.SearchDateView类还具有更改SearchDateView.xib中标签值的功能.我希望我的两个ViewControllers加载这个笔尖,但显然我不知道如何正确加载笔尖.无论我做什么,最好什么都不显示,最坏的情况是抛出异常.苹果文档谈到将IB中其他类的实例拖入主视图,但这似乎没有成功.我在ViewController中有一个SearchDateView插座,我尝试在控制器的加载视图上执行此操作:
searchDateView = [[[NSBundle mainBundle] loadNibNamed:@"SearchDateView" owner:self options:nil] objectAtIndex:0];
[[self view] addSubview:searchDateView];
Run Code Online (Sandbox Code Playgroud)
但是我得到了这个例外:
*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<MainViewController 0x431fac0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key searchDateLabel.'
Run Code Online (Sandbox Code Playgroud)
我知道我做了一些完全错误的事情,但是有一个nib,关联的视图类更新该nib中的一些对象,并在不同的控制器中重用该nib的正确方法是什么?
编辑:鉴于评论可能这还不够明确.我不想在整个ENTIRE视图中使用相同的nib文件 - 而是使用子视图.因此,例如,控制器A具有映射和SearchDateView,控制器B具有表视图和SearchDateView.所以我想知道如何将子视图加载到多个控制器中......
我正在处理一些 iPhone MapKit 代码,当地图边界发生变化时会触发一些事件(基本上是对外部服务器的一些查询)。有一个我似乎无法解决的边缘情况。当用户输入新地址时,我使用 setRegion 放大该位置,然后计算地图的边界并使用这些坐标查询我的外部服务器。我总是调用 setRegion 但是,当它不会触发时有一种边缘情况。也就是说,当用户神奇地碰巧选择了位于地图当前中心的完全相同的地址时,当该地图被缩放到完全相同的区域时。当然,这种可能性很少见,但使用以下代码很容易实现:
CLLocation *centerOfMap = [[CLLocation alloc] initWithLatitude:mapView.centerCoordinate.latitude longitude:mapView.centerCoordinate.longitude];
mySearchLocation.searchLocation = centerOfMap;
//Recenter and zoom map in on search location
MKCoordinateRegion region = {{0.0f, 0.0f}, {0.0f, 0.0f}};
region.center = mySearchLocation.searchLocation.coordinate;region.span.longitudeDelta = 0.01f;
region.span.latitudeDelta = 0.01f;
[self.mapView setRegion:region animated:YES];
Run Code Online (Sandbox Code Playgroud)
这相当于允许用户在当前地图的中心放置一个大头针,然后根据它向我的服务器发出查询。不幸的是,因为代码逻辑取决于区域的变化(我这样做是为了让用户可以轻松地在地图上平移而不必显式按下刷新按钮),我需要一个解决方法。我如何知道何时调用了 setRegion 但它不会触发 regionWillChange / regionDidChange。我可以以某种方式覆盖该功能吗?
编辑:当我评论第一个答案时,我尝试使用以下代码检测区域何时不会改变:
//Recenter and zoom map in on search location
MKCoordinateRegion region = {{0.0f, 0.0f}, {0.0f, 0.0f}};
region.center = mySearchLocation.searchLocation.coordinate;
region.span.longitudeDelta = 0.01f;
region.span.latitudeDelta = 0.01f;
region = [mapView regionThatFits:region]; //Not …
Run Code Online (Sandbox Code Playgroud) 我有一个出现在许多页面上的元素,我想根据它所在的高级 div 的类对其进行不同的样式。例如,如果我想根据“更改徽标的颜色”其所在页面的类型”。然后假设这些类型可以分组(因此 typeA、typeB 和 typeC 应该使用一种颜色,而 typeD 和 typeE 应该使用另一种颜色)。此外,作为高级 div,这些类型也用于其他用途,因此它们不能合并。
.typeA #logo,
.typeB #logo,
.typeC #logo{
color: #ffffff;
}
.typeD #logo,
.typeE #logo,{
color: #000000;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法与一些选择器链接在一起,这样我就不必让这段代码看起来如此令人讨厌。这个例子很小,但现实世界的版本涉及更多的类型。有没有办法做类似的事情:
.typeA || .typeB || .typeC #logo{
color: #ffffff;
}
Run Code Online (Sandbox Code Playgroud)