Tôi muốn cập nhật giao diện người dùng của mình theo MKMapView liên tục khi người dùng phóng to hoặc cuộn quanh bản đồ. (Không chỉ sau khi cuộn xong, nó hoạt động tốt.)Có thể liên tục theo dõi vùng MKMapView trong khi cuộn/thu phóng không?
Tôi đã thử phương thức đại biểu mapView: regionWillChangeAnimated: trong đó, theo tài liệu, "được gọi bất cứ khi nào khu vực bản đồ được hiển thị thay đổi. có thể được gọi nhiều lần để báo cáo cập nhật cho vị trí bản đồ. " http://developer.apple.com/library/ios/#DOCUMENTATION/MapKit/Reference/MKMapViewDelegate_Protocol/MKMapViewDelegate/MKMapViewDelegate.html
- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
{
[self updateUIAcordingToMapViewRegionChange];
}
Nhưng tiếc là điều này không làm việc vì các tài liệu có vẻ như không được nói sự thật. Phương pháp này chỉ được gọi một lần vào lúc bắt đầu thay đổi khu vực. Trong khi cuộn, trong khi ngón tay xuống và di chuyển xung quanh, phương pháp sẽ không bao giờ được gọi lại.
Các bài chỉ về vấn đề này tôi có thể tìm được bằng cách MacRumors namanhams thành viên: http://forums.macrumors.com/showthread.php?t=1225172 Nhưng không ai đưa ra bất kỳ ý tưởng ...
Là một workaround tôi đã cố gắng thiết lập một bộ đếm thời gian trong regionWillChange (và làm mất hiệu lực nó trong regionDidChange):
- (void)handleRegionChange:(NSTimer*)timer
{
[self updateUIAcordingToMapViewRegionChange];
}
- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
{
self.mapRegionIsChangingTimer = [NSTimer scheduledTimerWithTimeInterval:0.1
target:self
selector:@selector(handleRegionChange:)
userInfo:nil
repeats:YES];
}
Nhưng điều đó cũng không hiệu quả. Tất cả các cuộc gọi phương thức từ bộ đếm thời gian được thực hiện cùng một lúc ngay sau khi cuộn xong. Có vẻ như di chuyển các MapView chặn các chủ đề chính hoặc một cái gì đó ...
Tôi cũng đọc bài này trên stackoverflow, nhưng tiếc là không hoàn toàn hiểu nó: Monitor MKMapView redraw events Vì vậy, nếu các giải pháp cho vấn đề của tôi thực sự nằm ở chỗ Somali thread, xin vui lòng cho tôi biết như vậy, và tôi cố gắng đào sâu vào chi tiết của nó. Tôi vẫn hy vọng tôi chỉ đơn giản là quá ngu ngốc hoặc quá mù để tìm phương pháp đại biểu chính xác, và thực sự đánh giá cao bất kỳ gợi ý, cách giải quyết và thực tiễn tốt nhất để đối phó với theo dõi khu vực MKMapView.
Cảm ơn!
Cảm ơn! Tôi nghĩ rằng đây là chính xác những gì tôi đã thử bản thân mình (xem đoạn mã thứ hai ở trên). Những gì tôi đã làm sai là: Tôi đã lưu bộ đếm thời gian trong một thuộc tính, nhưng không giống như đoạn mã của tôi (mà tôi đã thay đổi để 'làm ngắn hơn và rõ ràng hơn') tôi đã tạo nó trong bộ thu chỉ khi biến mẫu không phải là không. Nhưng làm mất hiệu lực bộ đếm thời gian không đặt thuộc tính là 0, vì vậy tôi đoán tôi luôn thêm một bộ hẹn giờ đã bị vô hiệu hóa cũ vào runloop khi mapView của tôi thay đổi khu vực ... – Goodsquirrel