2012-07-11 11 views
12

Chúng tôi có thể có chế độ xem chú thích tùy chỉnh cho vị trí hiện tại của người dùng trong iOS không?Chế độ xem chú thích tùy chỉnh cho người dùng không di chuyển chế độ xem bản đồ

Tôi cần xóa dấu chấm màu xanh lam (có hình tròn) bằng chế độ xem tùy chỉnh của riêng tôi (nói một số pin ping). có khả năng làm cái này không?

Nếu có, pin này có di chuyển đến vị trí mới khi có thay đổi về vị trí của người dùng không? Hay chúng ta cần xử lý nó theo chương trình?

Tôi quan sát thấy rằng nếu chúng tôi sử dụng dấu chấm màu xanh mặc định cho vị trí hiện tại của người dùng, thì nó sẽ được cập nhật trong bản đồ khi có thay đổi về vị trí của người dùng.

Tôi chỉ muốn biết nếu điều này có thể được thực hiện với chế độ xem tùy chỉnh của riêng chúng tôi.

Trả lời

14

Có, bạn có thể có chế độ xem tùy chỉnh cho vị trí của người dùng. Không may, khó thực hiện hơn là vì mặc dù yêu cầu documentation for the viewForAnnotation delegate method là bạn chỉ có thể cung cấp chế độ xem của riêng mình nếu lớp chú thích là MKUserLocation, chế độ xem tùy chỉnh sau đó không tiếp tục di chuyển với vị trí của người dùng. Trên thực tế, khi chế độ xem tùy chỉnh được trả lại cho MKUserLocation, chế độ xem bản đồ ngừng hoàn toàn cập nhật vị trí của người dùng (chế độ xem đại biểu của didUpdateUserLocation không còn kích hoạt) nữa. Tôi tin rằng đây là một lỗi.

Một cách giải quyết là sử dụng CLLocationManager và chú thích tùy chỉnh ...


Hãy chắc chắn rằng showsUserLocationNO hoặc đánh dấu trên bản đồ.

Khai báo các thuộc tính cho CLLocationManager và chú thích tùy chỉnh bằng cách sử dụng lớp tùy chỉnh triển khai giao thức MKAnnotation (hoặc bạn chỉ có thể sử dụng lớp chung MKPointAnnotation).

Trong viewDidLoad hoặc một số địa điểm thích hợp khác, hãy tạo CLLocationManager, đặt delegate và gọi startUpdatingLocation.

Trong location manager's didUpdateToLocation delegate method (không giao diện bản đồ của phương pháp didUpdateUserLocation đại biểu), tạo hoặc cập nhật chú thích tùy chỉnh của bạn:

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 
{ 
    if (myUserLocAnnot == nil) 
    { 
     self.myUserLocAnnot = [[[MyUserLocClass alloc] init] autorelease]; 
      //remove the autorelease if using ARC 
     myUserLocAnnot.title = @"You are here"; 
     myUserLocAnnot.coordinate = newLocation.coordinate; 
     [mapView addAnnotation:myUserLocAnnot]; 
    } 
    else 
    { 
     myUserLocAnnot.coordinate = newLocation.coordinate; 
    } 
} 

Cuối cùng, trong phương pháp đại biểu quan điểm bản đồ của viewForAnnotation, bạn sẽ quay trở lại một cái nhìn tùy chỉnh chú thích nếu chú thích là chú thích vị trí người dùng tùy chỉnh của bạn.

+0

phải đối mặt với cùng một vấn đề, có thể chúng tôi có thể gây ra lỗi cho quả táo – darshansonde

+0

Cảm ơn Anna, Hiện tại, nó đang hoạt động. Thậm chí tôi nghi ngờ có một lỗi trong mapview không hiển thị chế độ xem chú thích tùy chỉnh của chúng tôi cho việc phân bổ lại khi chúng tôi đặt nó. – nkd

+0

Nhưng một vấn đề khác mà tôi phải đối mặt ở đây là, ngay khi bắt đầu cập nhật vị trí, tôi nhận được cuộc gọi trở lại locationManager: didUpdateToLocation: phương thức fromLocation nơi tôi tạo chú thích và thêm nó vào bản đồ, nhưng bản đồ không hiển thị chế độ xem tùy chỉnh của tôi mặc dù tôi đang trở về chế độ xem tùy chỉnh. Nếu tôi tắt vị trí và vị trí, nó hoạt động. Có vấn đề gì ở đây không? – nkd