Tôi thực sự thích cách thiết kế chế độ xem chi tiết địa điểm được thiết kế. Đặc biệt là bản đồ với vị trí địa điểm trong "tiêu đề" của xem ... Làm thế nào nó được thực hiện? Thông tin chi tiết rõ ràng là một số uiscrollview (có thể là uitableview?) Và đằng sau nó (trong phần đầu) có một bản đồ nên khi bạn cuộn lên bản đồ là beeing uncovered khi cuộn xem bị trả lại ... có ai có ý tưởng làm thế nào để làm điều này?Bản đồ chi tiết bản đồ địa điểm mới
Trả lời
Dưới đây là cách tôi quản lý để tái tạo nó: -
Bạn cần một UIViewController
với một UIScrollView
như quan điểm của mình. Sau đó, nội dung của UIView
bạn thêm vào scrollview của bạn sẽ giống như thế này: -
- Khung các MKMapView
có một âm y
vị trí. Trong trường hợp này, chúng ta chỉ có thể thấy 100 bản đồ trong trạng thái mặc định (trước khi kéo).
- Bạn cần tắt thu phóng và cuộn trên bản sao MKMapView của mình.
Sau đó, mẹo là di chuyển xuống số centerCoordinate
của số MKMapView
khi bạn kéo xuống và điều chỉnh vị trí trung tâm của nó.
Đối với đó, chúng tôi tính toán bao nhiêu 1point đại diện như một vĩ độ vùng đồng bằng để chúng ta biết trung tâm phối hợp bao nhiêu bản đồ nên được di chuyển khi bị kéo điểm x trên màn hình: -
- (void)viewDidLoad {
[super viewDidLoad];
UIScrollView* scrollView = (UIScrollView*)self.view;
[scrollView addSubview:contentView];
scrollView.contentSize = contentView.frame.size;
scrollView.delegate = self;
center = CLLocationCoordinate2DMake(43.6010, 7.0774);
mapView.region = MKCoordinateRegionMakeWithDistance(center, 1000, 1000);
mapView.centerCoordinate = center;
//We compute how much latitude represent 1point.
//so that we know how much the center coordinate of the map should be moved
//when being dragged.
CLLocationCoordinate2D referencePosition = [mapView convertPoint:CGPointMake(0, 0) toCoordinateFromView:mapView];
CLLocationCoordinate2D referencePosition2 = [mapView convertPoint:CGPointMake(0, 100) toCoordinateFromView:mapView];
deltaLatFor1px = (referencePosition2.latitude - referencePosition.latitude)/100;
}
Khi các thuộc tính đó được khởi tạo, chúng ta cần thực hiện hành vi của UIScrollViewDelegate
. Khi chúng tôi kéo, chúng tôi chuyển đổi di chuyển được biểu thị bằng điểm thành vĩ độ. Và sau đó, chúng tôi di chuyển trung tâm của bản đồ bằng cách sử dụng một nửa giá trị này.
- (void)scrollViewDidScroll:(UIScrollView *)theScrollView {
CGFloat y = theScrollView.contentOffset.y;
// did we drag ?
if (y<0) {
//we moved y pixels down, how much latitude is that ?
double deltaLat = y*deltaLatFor1px;
//Move the center coordinate accordingly
CLLocationCoordinate2D newCenter = CLLocationCoordinate2DMake(center.latitude-deltaLat/2, center.longitude);
mapView.centerCoordinate = newCenter;
}
}
Bạn có được hành vi tương tự như ứng dụng bản đồ có xu hướng nhảy, tại đây, thay đổi trung tâm được thực hiện thuận lợi).
wow, đây là câu trả lời tuyệt vời ... cảm ơn rất nhiều!xin lỗi vì sự chậm trễ khi đánh dấu nó như đã giải quyết - tôi đã đi nghỉ ... dù sao ... tôi đã tự làm nó sau một thời gian và nó tương tự như giải pháp của bạn ... sự khác biệt duy nhất là khi tôi cuộn tôi làm mới toàn bộ mapView, thiết lập vùng hiển thị mới (nếu bạn cuộn rất nhiều bản đồ được phóng to) ... tôi thích giải pháp của bạn chỉ bằng cách thiết lập trung tâm bản đồ mới, cách của nó nhanh hơn nhiều so với giải pháp của tôi vì vậy tôi sẽ cập nhật mã của mình ... Một lần nữa, xin cảm ơn rất nhiều ! :) –
Bạn có thể giải thích cách bạn tính deltaLatFor1px trong viewDidLoad đặc biệt là referencePosition. Tôi gặp sự cố ứng dụng với mã nói rằng có sự cố với tọa độ địa lý không hợp lệ. Cảm ơn bạn! – MrBr
Thực ra những gì tôi đang làm là tôi tạo ra hai vị trí màn hình, với 100px giữa chúng. Sau đó, tôi chuyển đổi các vị trí màn hình đó thành vị trí bản đồ. Sau đó, tôi biết bao nhiêu vĩ độ 100px đại diện. Và sau đó thật dễ dàng để biết có bao nhiêu vĩ độ được biểu diễn bằng 1px (vĩ độ delta giữa 2 vị trí màn hình chia cho 100). – yonel
Ví dụ trên là tốt đẹp. Nếu bạn cần thêm trợ giúp, tôi nghĩ rằng họ đang sử dụng một cái gì đó rất giống với RBParallaxTableViewController. https://github.com/Rheeseyb/RBParallaxTableViewController
Về cơ bản nó có cùng tác dụng mà Path sử dụng cho ảnh tiêu đề của nó.
Câu trả lời của Yonel rất hay, nhưng tôi đã gặp sự cố khi tôi có một chiếc ghim ở chính giữa bản đồ. Vì Y âm, điểm được ẩn dưới UINavigationBar của tôi.
Sau đó, tôi đã không đặt Y âm và tôi sửa mapView.frame của mình theo độ lệch cuộn.
My MapView là 320 x 160
_mapView.frame = CGRectMake(0, 160, 320, -160+y);
Hope this helps một ai đó.
- 1. Vẽ Bản đồ địa hình
- 2. Lập bản đồ các điểm 2D đến Phối cảnh mới
- 3. bản đồ bing chi phí tiền?
- 4. Cách lấy ảnh của một địa điểm từ bản đồ google hoặc địa điểm API
- 5. Cách trừ một danh sách các phím bản đồ từ một bản đồ khác và lấy bản đồ mới (bản đồ A - mab B = bản đồ C)
- 6. Màu sắc chi tiết trong biểu đồ
- 7. Đồ thị chi tiết khá hg
- 8. Bản đồ iOS6, MISSING nút tiết lộ chi tiết (chữ V xanh lam) trên tất cả bản đồ của tôi! Cách lấy lại
- 9. Vị trí địa lý: chỉ di chuyển điểm đánh dấu bản đồ google mà không cần tải lại bản đồ
- 10. Bản đồ bản đồ - cách giữ bản đồ bên trong làm bản đồ?
- 11. Bản đồ địa lý nhiệt trong R
- 12. Điểm chạm với bản đồ thu phóngXem
- 13. Chỉ thị trình biên dịch để tạo ra một tập tin bản đồ chi tiết
- 14. Backbone.js Kịch bản chi tiết chính
- 15. Bản đồ + bản đồ choropleth trong R
- 16. Bản đồ sâu Bản đồ trong Groovy
- 17. Cách làm mới bản đồ Google.
- 18. Bản đồ Jquery Bings Bản đồ Json tải lại
- 19. Lập bản đồ Điểm GPS với Thực tế Augmented
- 20. Bản đồ tổ chức bản đồ tự tổ chức (SOM)
- 21. Hiển thị tuyến đường giữa hai điểm trên bản đồ với bản đồ: ios7
- 22. Tiết kiệm sản lượng: Bản đồ trong vim
- 23. API Google Địa điểm - Yêu cầu chi tiết địa điểm không được xác định
- 24. Bản đồ thế giới tương tác
- 25. Bản đồ MKMapViewTypes
- 26. Chi tiết về phiên bản Assembly
- 27. nhận địa chỉ sau khi nhấp vào bản đồ
- 28. Chuyển đổi một vector của bản đồ tới bản đồ bản đồ trong Clojure
- 29. Bản đồ làm mới Yii và EGMap (Bản đồ Google) làm mới các thay đổi của hộp kiểm
- 30. bản đồ so với hành vi của bản đồ
Tôi đã chỉnh sửa câu trả lời của mình, bây giờ việc triển khai hoàn hảo;) – yonel