2013-02-01 39 views
6

Từ các tài liệu cho MKRoadWidthAtZoomScale:MKRoadWidthAtZoomScale trong iOS 6?

Bạn không nên sử dụng chức năng này để lấy độ rộng đường trong iOS 6 và sau đó.

Có chức năng nào khác có thể được sử dụng thay thế hoặc chức năng này chỉ thiếu trong iOS 6?

Thật kỳ lạ khi chức năng không được chấp nhận, nếu bạn không nên sử dụng chức năng đó.

Trả lời

3

Tôi rất nguy hiểm khi đoán rằng nó không bị phản đối vì chức năng này sẽ được thêm lại vào một lúc nào đó. Chức năng này vẫn hoạt động trong iOS 6, vì nó không gây ra sự cố khi được gọi, mặc dù đầu ra không hữu ích.

Nếu bạn nhìn vào ứng dụng Bản đồ (Apple), bạn có thể thấy rằng khi bạn phóng to vào đường dẫn chỉ đường, chiều rộng của đường dẫn sẽ tăng ở mức thu phóng cao nhất. Chiều rộng của đường cũng tăng ở các mức thu phóng cao đó. Rõ ràng Apple có một cách nội bộ để biết các con đường có được bao nhiêu khi phóng to. Có lẽ nó chưa được kiểm tra đầy đủ để phát hành chung.

Chỉ trong trường hợp bất kỳ ai cho rằng bạn vẫn có thể sử dụng chức năng này, đây là chiều rộng đường được đề xuất bắt đầu được phóng to hoàn toàn (MKZoomScale = 1) và thu nhỏ.

Code:

for (float zoomScale=1; zoomScale>0.00001; zoomScale /= 2) { 
    NSLog(@"zoomScale: %f Road Width: %f", zoomScale, MKRoadWidthAtZoomScale(zoomScale)); 
} 

Kết quả:

zoomScale: 1.000000 Road Width: 21.000000 
zoomScale: 0.500000 Road Width: 32.000000 
zoomScale: 0.250000 Road Width: 60.000000 
zoomScale: 0.125000 Road Width: 96.000000 
zoomScale: 0.062500 Road Width: 176.000000 
zoomScale: 0.031250 Road Width: 288.000000 
zoomScale: 0.015625 Road Width: 448.000000 
zoomScale: 0.007812 Road Width: 768.000000 
zoomScale: 0.003906 Road Width: 1536.000000 
zoomScale: 0.001953 Road Width: 2048.000000 
... 

Đối với một chức năng thay thế, tôi muốn đề nghị chỉ cần tạo ra một số giá trị mà hoạt động tốt trong vòng 2 hoặc 3 cấp độ zoom cao nhất và sử dụng một giá trị không đổi bên dưới đó.

Đây là lớp phủ bản đồ của Apple ở mức thu phóng thấp và cao. Bạn có thể thấy rằng tuyến đường thay thế không xem xét chiều rộng của đường lớn hơn, nhưng chiều rộng tuyến đường chính là điểm trên. Thay đổi tuyến đường không ảnh hưởng đến chiều rộng tuyến đường thay thế.

enter image description here

+1

Cảm ơn bạn đã dành sự cố để viết nội dung này. Thật không may tôi thấy nó khá khó để làm theo. Sử dụng chức năng bị cấm * làm * cho bạn một kết quả khá hợp lý (tôi đã thử nó). Sử dụng hằng số ở các mức thu nhỏ sẽ cho các đường rất mỏng. Sự lựa chọn của Apple để hiển thị các dòng ở hai độ rộng khác nhau có lẽ chỉ ra lý do tại sao họ nghĩ rằng một chức năng không phải là cách để đi, nhưng dường như không nói bất cứ điều gì về bản thân 'MkRoadMapWidthAtZoomScale'. – Bryan

+0

Khi bạn nói bạn có kết quả hợp lý, bạn đã sử dụng 'MKRoadWidthAtZoomScale()' như thế nào và hệ điều hành nào đang hoạt động? Khi tôi nói "sử dụng hằng số", tôi muốn sử dụng hằng số cho chiều rộng của đường theo điểm thay vì lấy chiều rộng của đường từ một hàm. Điều này sẽ cung cấp cho bạn các dòng _fat_ khi thu nhỏ, không phải các đường mỏng. Phóng to, nếu bạn không thay đổi chiều rộng, các dòng sẽ quá mỏng. –

+1

Tôi đã sử dụng nó như thế nào: về cơ bản CGContextSetLineWidth (context, MKRoadWidthAtZoomScale (zoomScale)); trên iOS 6.1. Tôi chỉ cố gắng một hằng số - 5000 - và tôi chỉ có thể nghĩ rằng bạn đang sử dụng 'phóng to' theo cách ngược lại tôi nghĩ về nó - đối với tôi, các tính năng bản đồ thực sự lớn khi phóng to và đường thẳng là chất béo và tôi thấy toàn bộ các quốc gia khi thu nhỏ và đường kẻ mỏng. – Bryan

0

Tính đến iOS 7.1 không có cảnh báo trong tài liệu về MKRoadWidthAtZoomScale nữa. Nó được định nghĩa trong MKOverlayRenderer.h, được giới thiệu trong iOS 7.0.

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