为什么我的mapview框架的中心不排成中心坐标?

时间:2014-03-10 17:18:06

标签: ios objective-c mkmapview

我正在尝试在mapview的中心渲染一个圆圈。我还在mapview上显示用户的当前位置,并将地图的中心设置为那里。不过,这两个人并没有排队。

这是我设置圈子的地方:

[self.mapView setShowsUserLocation:YES];
CAShapeLayer *circle = [CAShapeLayer layer];
int radius = 50;
circle.path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, 2.0*radius, 2.0*radius)
                                         cornerRadius:radius].CGPath;
// Set position of the circle.
// We use the frame of the mapview subtracted by circle radius to determine the center
circle.position = CGPointMake(CGRectGetMidX(self.mapView.frame)-radius,
                              CGRectGetMidY(self.mapView.frame)-radius);
circle.fillColor = [[UIColor alloc] initWithRed:0.5 green:0.5 blue:0.6 alpha:0.3].CGColor;
circle.strokeColor = [UIColor blackColor].CGColor;
circle.lineWidth = 1;

// Add to parent layer
[self.mapView.layer addSublayer:circle];

// Add 'crosshair'
UIView *view = [[UIView alloc] init];
view.backgroundColor = [UIColor blackColor];
view.frame = CGRectMake(0, 0, 5, 5);
[self.mapView addSubview:view];
view.center = self.mapView.center;

在didUpdateUserLocation委托方法中,我有:

    [self.mapView setCenterCoordinate:userLocation.coordinate];

这是模拟器上的样子。

enter image description here

我最终希望允许用户平移并选择地图的某个区域,但现在我不确定地图的中心坐标是否与圆圈的中心重合。有帮助吗?谢谢!

4 个答案:

答案 0 :(得分:1)

您可能遇到了我最近发现的同一个错误。我已将它报告给Apple并将其标记为重复,因此可能会在iOS 7.1中修复。

Bug with MKMapView's centerCoordinate during rotation?

答案 1 :(得分:0)

看起来像20点偏移(与状态栏相同)。使用frame查找中心后,可能会调整地图视图的大小。

您可以尝试使用MKCircleView或其他叠加层来代替形状图层。

答案 2 :(得分:0)

我认为这是一个状态栏问题。

试试这个。

[self.mapView setShowsUserLocation:YES];
CAShapeLayer *circle = [CAShapeLayer layer];
int radius = 50;
circle.path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, 2.0*radius, 2.0*radius)
                                     cornerRadius:radius].CGPath;
// Set position of the circle.
// We use the frame of the mapview subtracted by circle radius to determine the center
circle.position = CGPointMake(CGRectGetMidX(self.mapView.frame)-radius,
                          CGRectGetMidY(self.mapView.frame)-radius-20);
circle.fillColor = [[UIColor alloc] initWithRed:0.5 green:0.5 blue:0.6 alpha:0.3].CGColor;
circle.strokeColor = [UIColor blackColor].CGColor;
circle.lineWidth = 1;

// Add to parent layer
[self.mapView.layer addSublayer:circle];

// Add 'crosshair'
UIView *view = [[UIView alloc] init];
view.backgroundColor = [UIColor blackColor];
view.frame = CGRectMake(0, 0, 5, 5);
[self.mapView addSubview:view];
view.center = self.mapView.center;

我希望它适合你。

答案 3 :(得分:0)

使用Xamarin.Forms,我必须确保启用“安全区域布局指南”,并将其添加到我的ContentPage XAML中。

<ContentPage ...
         xmlns:ios="clr-namespace:Xamarin.Forms.PlatformConfiguration.iOSSpecific;assembly=Xamarin.Forms.Core"
         Title="Safe Area"
         ios:Page.UseSafeArea="true">
<StackLayout>
    ...
</StackLayout>

有关更多信息:Safe Area Layout Guide on iOS