2013-01-21 62 views
5

Tôi gặp vấn đề về hiệu năng khi thêm chú thích vào bản đồ trong iOS (sử dụng các phương pháp bản đồ tiêu chuẩn - do đó sử dụng bản đồ Apple). Tôi đang cố gắng thêm một số lượng lớn các chú thích (10000+) hàng loạt, sử dụng phương thức (void)addAnnotations:(NSArray *)annotations. Các đối tượng chú thích là không có gì đặc biệt - một lớp học rất cơ bản mà thực hiện MKAnnotation chỉ với các nhà xây dựng quy định như sau:Thêm chú thích vào bản đồ quá chậm - iOS

- (id)initWithTitle:(NSString *)ttl andCoordinate:(CLLocationCoordinate2D)c2d { 
    if(self = [super init]) { 
     title = ttl; 
     coordinate = c2d; 
    } 

    return self; 
} 

Để kiểm tra, tôi đã tạo ra một ứng dụng cơ bản mà chỉ cần thêm các chú thích vào một bản đồ cơ bản xem trên tải, và phải mất khoảng 6-7 giây trên một iPad 2. Hiệu suất rất chấp nhận được. Tuy nhiên, mọi thứ trở nên phức tạp khi tôi nhúng cùng một chế độ xem bản đồ cơ bản trong ứng dụng của riêng tôi. Đó là chính xác cùng một logic, nhưng khi tôi làm điều đó trong ứng dụng của tôi, phải mất khoảng 50 giây để tải tất cả các chú thích.

Ứng dụng của tôi có nhiều lượt xem trong nhau. Để xác định vấn đề, tôi đã bắt đầu nhúng chế độ xem bản đồ bắt đầu từ cấp thấp nhất, cho đến khi tôi đạt đến cấp cao nhất. Tôi đã thực hiện profiling trong từng bước để xem nó có giúp hiệu suất hay không, nhưng tôi không thấy kết quả nào - nó vẫn còn khoảng 50 giây. Hiện tại, ứng dụng của tôi về cơ bản chỉ tải và thêm chú thích vào chế độ xem bản đồ cấp cao nhất và duy nhất, lý tưởng giống như ứng dụng độc lập, nhưng vì lý do gì đó, tôi vẫn thấy hiển thị chú thích mất khoảng 50 giây. Lời giải thích hợp lý duy nhất tôi có là liên quan đến một số cài đặt ứng dụng mà tôi có bằng cách nào đó cản trở hiệu suất bản đồ. Tôi đã thực hiện một loạt các đọc để đưa ra một giải pháp không có kết quả.

Bất kỳ ai cũng có bất kỳ ý tưởng nào về vấn đề ở đây? Cảm ơn!

+0

Câu hỏi và chiều sâu/chi tiết tuyệt vời. Thật không may tôi không biết câu trả lời, nhưng đối với một câu hỏi hẹn giờ đầu tiên trên StackOverflow tôi phải hoan nghênh bạn! – MCKapur

+0

Tôi đã không chơi nhiều MapKit, nhưng đây là 2 tùy chọn có thể: 1) Thử thực hiện nó trong một chuỗi bg (không chắc chắn nếu nó hoạt động). 2) Chỉ tải chú thích sẽ có ý nghĩa trong thu phóng được xác định. Vì vậy, nếu yo rất thu nhỏ, bạn chỉ có thể hiển thị 20, khi bạn phóng to, số chú thích có thể sẽ nhỏ hơn 10k, vì vậy hãy hiển thị 20 quan trọng tiếp theo giao cắt chế độ xem hiện tại của bạn ... v.v. – LocoMike

Trả lời

0

Không có "sự cố" thực sự. Ý tôi là, bạn có hơn 10.000 lượt phân bổ, bản vẽ và kết xuất thực sự có tác động đến hiệu suất của ứng dụng.

Đề xuất của tôi là chặn điều hướng của người dùng trên bản đồ. Sử dụng một cái gì đó như [mapView visibleMapRect] để xem phần bản đồ hiển thị trên màn hình. Nhận tọa độ của rect (có thể lớn hơn một chút để người dùng không thể nhận thấy khi di chuyển bản đồ) và chỉ tải các chú thích bên trong rect đó.

Khi người dùng di chuyển, bạn chỉ phải tải các chú thích nằm trong MINUS mới trực tiếp các chú thích đã được tải trong phần trước. Tôi đoán bạn cũng có thể xóa chú thích khi họ ra khỏi màn hình.

Điều này giống như một chút những gì Apple đề xuất làm khi xử lý chế độ xem cuộn. Tôi nhớ ứng dụng trong đó người dùng sẽ phải tải nội dung của phần trước đó và tiếp theo của scrollview (và để giải phóng nội dung của chế độ xem trước đó) để có mức tiêu thụ bộ nhớ chậm và vẫn duy trì trải nghiệm người dùng tốt .

Hãy thử suy nghĩ về những gì người dùng đang xem, cố gắng chỉ hiển thị các chú thích quan trọng phần (hoặc khu vực khi chúng được gọi trong thuật ngữ MKMapView) và tôi nghĩ rằng phản hồi ứng dụng của bạn sẽ chỉ cải thiện ngay lập tức.

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