我正在尝试在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];
这是模拟器上的样子。
我最终希望允许用户平移并选择地图的某个区域,但现在我不确定地图的中心坐标是否与圆圈的中心重合。有帮助吗?谢谢!
答案 0 :(得分:1)
您可能遇到了我最近发现的同一个错误。我已将它报告给Apple并将其标记为重复,因此可能会在iOS 7.1中修复。
答案 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>