2012-05-22 38 views
5

Tôi đang cố vẽ đường thẳng giữa hai điểm trong chế độ xem lớp phủ. Trong phương pháp MKOverlayView, tôi nghĩ rằng tôi đang làm đúng nhưng tôi không hiểu tại sao nó không vẽ bất kỳ ...dòng không được vẽ trên chế độ xem lớp phủ

Có ai biết tại sao không?

- (void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale 
      inContext:(CGContextRef)context 
{ 
    UIGraphicsPushContext(context); 

    MKMapRect theMapRect = [[self overlay] boundingMapRect]; 
    CGRect theRect = [self rectForMapRect:theMapRect]; 

    // Clip the context to the bounding rectangle. 
    CGContextAddRect(context, theRect); 
    CGContextClip(context); 

    CGPoint startP = {theMapRect.origin.x, theMapRect.origin.y}; 
    CGPoint endP = {theMapRect.origin.x + theMapRect.size.width, 
     theMapRect.origin.y + theMapRect.size.height}; 

    CGContextSetLineWidth(context, 3.0); 
    CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor); 

    CGContextBeginPath(context); 
    CGContextMoveToPoint(context, startP.x, startP.y); 
    CGContextAddLineToPoint(context, endP.x, endP.y); 
    CGContextStrokePath(context); 

    UIGraphicsPopContext(); 
} 

Cảm ơn sự giúp đỡ của bạn.

Trả lời

3

Dòng đang được vẽ bằng cách sử dụng startPendPCGPoint giá trị nhưng chúng được khởi tạo bằng cách sử dụng theMapRect có chứa giá trị MKMapPoint.

Thay vào đó, hãy khởi tạo chúng bằng cách sử dụng theRect mà bạn đang chuyển đổi từ theMapRect bằng cách sử dụng rectForMapRect.

Ngoài ra, đối với chiều rộng của đường, bạn có thể muốn mở rộng nó bằng cách sử dụng chức năng MKRoadWidthAtZoomScale. Nếu không, chiều rộng đường cố định là 3.0 sẽ không hiển thị trừ khi bạn được phóng to rất gần.

Mã thay đổi sẽ trông như thế này:

CGPoint startP = {theRect.origin.x, theRect.origin.y}; 
CGPoint endP = {theRect.origin.x + theRect.size.width, 
    theRect.origin.y + theRect.size.height}; 

CGContextSetLineWidth(context, 3.0 * MKRoadWidthAtZoomScale(zoomScale)); 


Cuối cùng, thay vì một tùy chỉnh MKOverlayView, tại sao không sử dụng một MKPolylineView để tránh vẽ đường thủ công?

+0

Đã hoạt động !! Cảm ơn nhiều!!! –

+0

Xin chào, tôi có thêm một câu hỏi nữa ... Nếu tôi khởi tạo CGPoint từ boundingMapRect, tôi nên làm gì ???? –

+0

oh .. và lý do tôi không sử dụng MkPolylineView là tôi cần phải vẽ một mũi tên không chỉ đường thẳng .... –

Các vấn đề liên quan