Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 选择“注释”会导致MKMapView缩小_Iphone_Ios_Mkmapview_Mkannotationview - Fatal编程技术网

Iphone 选择“注释”会导致MKMapView缩小

Iphone 选择“注释”会导致MKMapView缩小,iphone,ios,mkmapview,mkannotationview,Iphone,Ios,Mkmapview,Mkannotationview,我试图让自定义MKAnnotationView(PostFlag)在选中时执行两项操作:1)展开以显示有关注释的详细信息,2)在地图中居中。问题在于,当选择注释时,MKMapView有时会显著缩小。这会导致我处理重要缩放事件的逻辑运行,这会将附近的注释收集到公共注释视图中,导致重新加载注释视图,这通常会将用户试图查看的注释替换为关闭的注释视图 我试图解决这一问题,首先要确保在尝试将注释居中时没有错误地设置区域(例如,跨距会导致缩小)。那里的一切似乎都很好-当我设置它时,区域是正确的。委托方法ma

我试图让自定义MKAnnotationView(PostFlag)在选中时执行两项操作:1)展开以显示有关注释的详细信息,2)在地图中居中。问题在于,当选择注释时,MKMapView有时会显著缩小。这会导致我处理重要缩放事件的逻辑运行,这会将附近的注释收集到公共注释视图中,导致重新加载注释视图,这通常会将用户试图查看的注释替换为关闭的注释视图

我试图解决这一问题,首先要确保在尝试将注释居中时没有错误地设置区域(例如,跨距会导致缩小)。那里的一切似乎都很好-当我设置它时,区域是正确的。委托方法mapView:didChangeRegion:animated:仍然使用缩小的区域调用。我不确定那里到底发生了什么

在将区域更改为注释中心之前,将scrollEnabled和zoomEnabled设置为NO似乎没有任何效果

无论我是否为注释视图的展开设置动画,缩放仍然会发生

这听起来有人熟悉吗?下面是一些代码:

- (void) mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{
    self.selectedFlag = (PostFlag*)view;  //disables scrolling/zooming on the map

    //move region to show expanded flag
    float size = (m_selectedFlag.expandedHeight / 2.0) + 50; //getting a comfortable position in the display
    float dLat = size * mapView.region.span.latitudeDelta / mapView.frame.size.height;  //get span in degrees from degree to pixel ratio

    //build a new coordinate for our center location
    CLLocationCoordinate2D originalCoord = ((PostAnnotation*)m_selectedFlag.annotation).coordinate;
    CLLocationCoordinate2D offsetCoord = CLLocationCoordinate2DMake(originalCoord.latitude + dLat, originalCoord.longitude);

    //adjust the map view to center on that new coordinate
    [m_mapView setRegion: MKCoordinateRegionMake(offsetCoord, m_mapRegionAtTimeOfLastUpdate.span) animated: YES];
}


- (void) setSelectedFlag:(PostFlag *) val
{
    if(m_selectedFlag)
    {
        m_selectedFlag.expanded = NO;
        [m_selectedFlag release];
    }

    if(val)
        m_selectedFlag = [val retain];
    else
        m_selectedFlag = nil;

    if(m_selectedFlag)
    {
        m_selectedFlag.expanded = YES;

        [m_mapView bringSubviewToFront: m_selectedFlag];
        m_mapView.scrollEnabled = NO;
        m_mapView.zoomEnabled = NO;
    }
    else
    {
        m_mapView.scrollEnabled = YES;
        m_mapView.zoomEnabled = YES;
    }
}
当PostFlag崩溃时,它会告诉此视图控制器和vc在地图上重新启用滚动和缩放。因此,需要明确的是,当注释视图展开时,地图上的缩放和滚动将关闭

- (void) postFlagWasCollapsed: (PostFlag*) flag
{
    [self.expandedFlags removeObject: flag];

    if([self.expandedFlags count] == 0)
    {
        m_mapView.scrollEnabled = YES;
        m_mapView.zoomEnabled = YES;
    }
}
另外,为了澄清,我保留了一个数组,其中包含扩展的注释视图。由于用户可以点击附近的注释视图并在先前展开的视图关闭时展开该视图,因此可能会出现同时展开两个注释视图的情况。因此,为了确保在关闭所有注释之前不会重新打开滚动/缩放,我使用了数组

- (void) postFlagWasExpanded: (PostFlag*) flag
{
    if(!self.expandedFlags)
        self.expandedFlags = [NSMutableArray array];

    if([self.expandedFlags indexOfObject: flag] == NSNotFound)
        [self.expandedFlags addObject: flag];

}

这可能比你想要的要详细。但是,如果有人知道为什么选择注释视图时地图视图会缩小,请插话。提前谢谢

我不认为scrollEnabled的意思和你认为的一样。它会阻止用户滚动,但不会阻止代码告诉地图滚动。缩放也是如此

如果将此属性的值设置为“否”,您仍然可以通过更改“区域”属性中的值以编程方式更改地图位置

参考:


所以别再管闲事了。再次查看您的setRegion调用。我认为你的跨度是错误的。记录该区域,并告诉我们当它正在做您想要的事情时,以及当它从根本上缩小时,它设置了什么。

我不认为scrollEnabled意味着您认为它意味着什么。它会阻止用户滚动,但不会阻止代码告诉地图滚动。缩放也是如此

如果将此属性的值设置为“否”,您仍然可以通过更改“区域”属性中的值以编程方式更改地图位置

参考:


所以别再管闲事了。再次查看您的setRegion调用。我认为你的跨度是错误的。记录该区域,并告诉我们它在做您想要的事情时设置了什么,以及它何时从根本上缩小。

这可能已经解决了,但如果其他人有相同的问题,只需将setRegion替换为setCenterCoordinate

根据apple doco,setRegion将对视图中的注释进行假设,并相应地改变缩放。setCenterCoordinate将不进行此类评估,只需在指定为地图中心的坐标上将地图居中即可


希望这有助于其他人,因为它也困扰了我一段时间。

这可能已经解决,但如果其他人也有同样的问题,只需将setRegion替换为setCenterCoordinate

根据apple doco,setRegion将对视图中的注释进行假设,并相应地改变缩放。setCenterCoordinate将不进行此类评估,只需在指定为地图中心的坐标上将地图居中即可


希望这能帮助别人,因为它也困扰了我一段时间。

是的!原来是其他代码错误地设置了区域。谢谢,是的!原来是其他代码错误地设置了区域。谢谢