我在iOS 4上使用iPhone上的mapkit。 我正在使用自定义叠加层和自定义叠加层视图,以在地图上绘制形状。 目前,形状只是矩形,但我正在计划更复杂的东西。这就是我没有使用MKPolygon覆盖类型的原因。 这是我的叠加视图绘制方法的代码:
-(void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context
{
// Clip context to bounding rectangle
MKMapRect boundingMapRect = [[self overlay] boundingMapRect];
CGRect boundingRect = [self rectForMapRect:boundingMapRect];
CGContextAddRect(context, boundingRect);
CGContextClip(context);
// Define shape
CGRect shapeRect = CGRectMake(0.5f, 0.5f, boundingRect.size.width - 1.0f, boundingRect.size.height - 1.0f);
// Fill
CGContextSetRGBFillColor(context, 0.5f, 0.5f, 0.5f, 0.5f);
CGContextFillRect(context, shapeRect);
// Stroke
CGContextSetRGBStrokeColor(context, 0, 0, 0, 0.75f);
CGContextSetLineWidth(context, 1.0f);
CGContextStrokeRect(context, shapeRect);
}
问题是矩形被正确填充(因此看起来它们的边界矩形被正确设置),但它们不会被抚摸。 有人可以帮忙吗? 谢谢!
答案 0 :(得分:2)
正如之前的一些评论所述,问题在于线宽。更一般地说,所有绘图都会自动缩放以跟随地图缩放,因此如果您希望某些绘图指标与缩放无关,则必须将其除以zoomScale。
以下是我的iPhone 4上正常使用的新代码:
-(void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context
{
// Clip context to bounding rectangle
MKMapRect boundingMapRect = [[self overlay] boundingMapRect];
CGRect boundingRect = [self rectForMapRect:boundingMapRect];
CGContextAddRect(context, boundingRect);
CGContextClip(context);
// Define shape
CGRect shapeRect = CGRectInset(boundingRect, 2.0f / zoomScale, 2.0f / zoomScale);
// Fill
CGContextSetRGBFillColor(context, 0.5f, 0.5f, 0.5f, 0.5f);
CGContextFillRect(context, shapeRect);
// Stroke
CGContextSetRGBStrokeColor(context, 0, 0, 0, 0.75f);
CGContextSetLineWidth(context, 4.0f / zoomScale);
CGContextStrokeRect(context, shapeRect);
}
我还会报告我在叠加层中使用的代码来计算和返回边界矩形,因为我认为它可以提供帮助:
-(MKMapRect)boundingMapRect
{
// Overlay bounds
CLLocationCoordinate2D topLeftcoordinate = <the top-left coordinate of overlay>;
CLLocationCoordinate2D bottomRightCoordinate = <the bottom-right coordinate of overlay>;
// Convert them to map points
MKMapPoint topLeftPoint = MKMapPointForCoordinate(topLeftcoordinate);
MKMapPoint bottomRightPoint = MKMapPointForCoordinate(bottomRightCoordinate);
// Calculate map rect
return MKMapRectMake(topLeftPoint.x, topLeftPoint.y, bottomRightPoint.x - topLeftPoint.x, topLeftPoint.y - bottomRightPoint.y);
}
感谢大家的意见和建议。
答案 1 :(得分:0)
import Layout from "../components/MyLayout";
import Link from "next/link";
const PostLink = props => (
<li>
<Link href={`/p/[id]?title=${props.title}`} as={`/p/${props.id}`}>
<a>{props.id}</a>
</Link>
</li>
);
const Blog = () => {
return (
<Layout>
<h1>My Blog</h1>
<ul>
<PostLink id="hello-nextjs" title="Hello Next.js" />
<PostLink id="learn-nextjs" title="Learn Next.js" />
<PostLink id="deploy-nextjs" title="Deploy Next.js" />
</ul>
</Layout>
);
};
export default Blog;
中,
使用 scaleFactor 来配置线条或其他线条的笔触宽度
属性可能会受到地图比例尺的影响
内容。请参阅MKOverlayRenderer的Apple官方网站drawMapRect:zoomScale:inContext:。