Góc nghiêng và độ cao hoàn toàn biến mất - các loại slot game

Mục lục

Một Lỗi Kỹ Thuật MapKit?

Tôi đang cố gắng viết một ứng dụng mở nguồn giống như Ingress, trong đó có một yêu cầu đặc biệt: phải đảm bảo góc nghiêng và độ cao trên bản đồ. Mặc định, camera của MapKit không có góc nghiêng, vì vậy cần thêm một hàm setCamera mới.

Ban đầu tôi đã thiết lập:

self.HackMapView.userTrackingMode = MKUserTrackingModeFollowWithHeading

Việc theo dõi vị trí là điều bắt buộc… Sau đó là đoạn mã sau:

if ([mapView respondsToSelector:@selector(camera)]) {
    [mapView setShowsBuildings:YES];
    MKMapCamera *newCamera = [[mapView camera] copy];
    // Góc nghiêng
    [newCamera setPitch:70.0];
    // Độ cao
    [newCamera setAltitude:100.0];
    [mapView setCamera:newCamera animated:YES];
}

Khi chạy đoạn mã này, bạn sẽ nhận thấy rằng MKUserTrackingModeFollowWithHeading luôn chậm hơn so với setCamera, và dường như nó có ưu tiên cao hơn (tuy nhiên cách diễn đạt này có thể chưa thực sự chuyên nghiệp). Điều này có nghĩa là: setCamera sẽ được thực thi trước, khiến camera giảm độ cao và điều chỉnh góc nghiêng. Tuy nhiên, sau một đến hai giây, khi MKUserTrackingModeFollowWithHeading hoạt động, bản đồ sẽ di chuyển đến vị trí của tôi và tất cả các tham số của setCamera sẽ bị khôi phục lại. Góc nghiêng và độ cao hoàn toàn biến mất…

Hơn nữa, do tôi đã cài đặt:

[mapView setCamera:newCamera animated:YES];

Đôi khi, khi animation của setCamera chưa hoàn thành, giao mua the cao thức MapKit:

- (void)mapViewWillStartLocatingUser:(MKMapView *)mapView { }

đã bắt đầu chạy. Khi bản đồ nhận được vị trí của tôi, nó cũng sẽ thực hiện một animation để di chuyển đến vị trí đó. Lúc này, mục tiêu của animation từ setCamera là vị trí mặc định của bản đồ (MKCoordinateRegion, thường là một vùng biển nào đó ở Đại Tây Dương), trong khi mục tiêu của animation từ MKUserTrackingModeFollowWithHeading là vị trí hiện tại của tôi. Hai animation này chạy đồng thời dẫn đến kết quả cuối cùng là bản đồ hiển thị một nơi nào đó giữa MKCoordinateRegion và vị trí định vị hiện tại của tôi…

_ (:з」∠) _

Thôi được… Nói cho cùng, điều này cũng không hẳn là một lỗi. Theo quan điểm của tôi, Apple lẽ ra nên cải thiện phần logic xử lý này… Nếu không, việc sử dụng setCamera sẽ trở nên rất phức tạp và tôi gần như phải tự viết lại toàn bộ MKUserTrackingModeFollowWithHeading bằng cách sử dụng:

+ (instancetype _Nonnull)cameraLookingAtCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate
fromEyeCoordinate:(CLLocationCoordinate2D)eyeCoordinate
eyeAltitude:(CLLocationDistance)eyeAltitude

Tự viết lại thì chắc chắn không tốt bằng phiên bản gốc của Apple.

Tôi cũng tìm thấy một số vấn đề tương tự:

  1. StackOverflow:

Tôi tin rằng đây là một lỗi trong MapKit. Tôi đã quan sát những hiện tượng tương tự khi phóng to chương trình trong khi MKUserTrackingModeFollowWithHeading được kích hoạt: Bản đồ tạm thời phóng xa nhưng ngay lập tức trở lại mức zoom trước đó khi nhận được cập nhật vị trí tiếp theo.

  1. OpenRadar:

MapKit: Phóng to chương trình trong khi theo dõi người dùng

  1. OpenRadar:

MKUserTrackingModeFollow cấm chọn annotation ở mép

EDIT: Ngày 3 tháng 9 năm 2015, 12:28 - Đã gửi một ticket cho bugreport SEE: