mapkit 缩放到最大比例 objective c
mapkit zoom to maximum scale objective c
我正在使用 mapkit。我开发了简单的故事板应用程序。
1-Mapkit 应缩放到最大比例以在加载 Mapkit 时显示用户位置。
2-单击 loc.png 时,地图应加载带有标题和副标题的位置描述以及有关位置的详细信息
- (nullable MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
MKAnnotationView * annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:@"testAnnotationView"];
if(annotationView == nil){
annotationView = [[MKAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:@"testAnnotationView"];
annotationView.image = [UIImage imageNamed:@"loc.png"];
annotationView.canShowCallout = true;
}
return annotationView;
}
我怎样才能完成这些任务?从这个link你可以下载示例项目。https://drive.google.com/file/d/0B5pNDpbvZ8SnRExkamtmdkwzeWc/view?usp=sharing
使用 mapKit 的这个扩展,并根据需要调整值,如果值越低,缩放越大
已编辑
OBJECTIVE-C
.h
#import <MapKit/MapKit.h>
@interface MKMapView (Zoom)
-(void)zoomToUserLocation;
-(void)zoomToUserLocationWith:(CLLocationCoordinate2D)coordinate and:(CLLocationDistance)latitudinalMeters and:(CLLocationDistance)longitudinalMeters;
-(void)zoomToUserLocationWith:(CLLocationDistance)latitudinalMeters and:(CLLocationDistance)longitudinalMeters;
@end
.m
#import "MKMapView+Zoom.h"
@implementation MKMapView (Zoom)
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
// Drawing code
}
*/
-(void)zoomToUserLocation
{
[self zoomToUserLocationWith:1000 and:1000];
}
-(void)zoomToUserLocationWith:(CLLocationCoordinate2D)coordinate and:(CLLocationDistance)latitudinalMeters and:(CLLocationDistance)longitudinalMeters
{
[self setRegion:MKCoordinateRegionMakeWithDistance(coordinate, latitudinalMeters, longitudinalMeters)];
}
-(void)zoomToUserLocationWith:(CLLocationDistance)latitudinalMeters and:(CLLocationDistance)longitudinalMeters
{
if(self.userLocation.location != nil){
[self zoomToUserLocationWith:self.userLocation.location.coordinate and:latitudinalMeters and:longitudinalMeters];
}
}
@end
使用它
[self.mapView zoomToUserLocation];
或
[self.mapView zoomToUserLocationWith:50 and:50];
或者您可以在
中使用它
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view{
[mapView zoomToUserLocationWith:view.annotation.coordinate and:500 and:500];
}
SWIFT
extension MKMapView {
func zoomToUserLocation() {
self.zoomToUserLocation(latitudinalMeters: 1000, longitudinalMeters: 1000)
}
func zoomToUserLocation(latitudinalMeters:CLLocationDistance,longitudinalMeters:CLLocationDistance)
{
guard let coordinate = userLocation.location?.coordinate else { return }
let region = MKCoordinateRegionMakeWithDistance(coordinate, latitudinalMeters, longitudinalMeters)
setRegion(region, animated: true)
}
}
使用它
mapView.zoomToUserLocation()
或
mapView.zoomToUserLocation(latitudinalMeters:50,longitudinalMeters:50)
希望对您有所帮助
这是我编写的用于放大和缩小 WKInterfaceMap (WatchKit) 的代码,不小于其最小值 (0.0) 且不大于其最大值(世界地图的 width/height)——而且,在加速缩放的曲线上,你走得越远,缩放速度越小,你走得越近:
- (void)crownDidRotate:(WKCrownSequencer *)crownSequencer rotationalDelta:(double)rotationalDelta
{
span.latitudeDelta += ((rotationalDelta * rotationalDelta) * (rotationalDelta)) + (span.latitudeDelta * rotationalDelta);
span.longitudeDelta += ((rotationalDelta * rotationalDelta) * (rotationalDelta)) + (span.longitudeDelta * rotationalDelta);
span.latitudeDelta = (span.latitudeDelta < 0) ? 0 : (span.latitudeDelta > MKCoordinateRegionForMapRect(MKMapRectWorld).span.latitudeDelta) ? MKCoordinateRegionForMapRect(MKMapRectWorld).span.latitudeDelta : span.latitudeDelta;
span.longitudeDelta = (span.longitudeDelta < 0) ? 0 : (span.longitudeDelta > MKCoordinateRegionForMapRect(MKMapRectWorld).span.longitudeDelta) ? MKCoordinateRegionForMapRect(MKMapRectWorld).span.longitudeDelta : span.longitudeDelta;
MKCoordinateRegion visibleRegion = MKCoordinateRegionMake(PlanetaryHourDataSource.sharedDataSource.locationManager.location.coordinate, span);
[self.map setRegion:visibleRegion];
}
这不仅可以防止无效区域(并在达到最大和最小缩放级别时向用户发出指示),而且可以确保当地图显示更多细节时缩放速度减慢,反之亦然:
<iframe src="https://player.vimeo.com/video/313729712" width="640" height="1384" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
加速曲线是这样的:
以上答案提供了任意值,不一定对应于范围的任何一端。
我正在使用 mapkit。我开发了简单的故事板应用程序。
1-Mapkit 应缩放到最大比例以在加载 Mapkit 时显示用户位置。
2-单击 loc.png 时,地图应加载带有标题和副标题的位置描述以及有关位置的详细信息
- (nullable MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
MKAnnotationView * annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:@"testAnnotationView"];
if(annotationView == nil){
annotationView = [[MKAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:@"testAnnotationView"];
annotationView.image = [UIImage imageNamed:@"loc.png"];
annotationView.canShowCallout = true;
}
return annotationView;
}
我怎样才能完成这些任务?从这个link你可以下载示例项目。https://drive.google.com/file/d/0B5pNDpbvZ8SnRExkamtmdkwzeWc/view?usp=sharing
使用 mapKit 的这个扩展,并根据需要调整值,如果值越低,缩放越大
已编辑
OBJECTIVE-C
.h
#import <MapKit/MapKit.h>
@interface MKMapView (Zoom)
-(void)zoomToUserLocation;
-(void)zoomToUserLocationWith:(CLLocationCoordinate2D)coordinate and:(CLLocationDistance)latitudinalMeters and:(CLLocationDistance)longitudinalMeters;
-(void)zoomToUserLocationWith:(CLLocationDistance)latitudinalMeters and:(CLLocationDistance)longitudinalMeters;
@end
.m
#import "MKMapView+Zoom.h"
@implementation MKMapView (Zoom)
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
// Drawing code
}
*/
-(void)zoomToUserLocation
{
[self zoomToUserLocationWith:1000 and:1000];
}
-(void)zoomToUserLocationWith:(CLLocationCoordinate2D)coordinate and:(CLLocationDistance)latitudinalMeters and:(CLLocationDistance)longitudinalMeters
{
[self setRegion:MKCoordinateRegionMakeWithDistance(coordinate, latitudinalMeters, longitudinalMeters)];
}
-(void)zoomToUserLocationWith:(CLLocationDistance)latitudinalMeters and:(CLLocationDistance)longitudinalMeters
{
if(self.userLocation.location != nil){
[self zoomToUserLocationWith:self.userLocation.location.coordinate and:latitudinalMeters and:longitudinalMeters];
}
}
@end
使用它
[self.mapView zoomToUserLocation];
或
[self.mapView zoomToUserLocationWith:50 and:50];
或者您可以在
中使用它- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view{
[mapView zoomToUserLocationWith:view.annotation.coordinate and:500 and:500];
}
SWIFT
extension MKMapView {
func zoomToUserLocation() {
self.zoomToUserLocation(latitudinalMeters: 1000, longitudinalMeters: 1000)
}
func zoomToUserLocation(latitudinalMeters:CLLocationDistance,longitudinalMeters:CLLocationDistance)
{
guard let coordinate = userLocation.location?.coordinate else { return }
let region = MKCoordinateRegionMakeWithDistance(coordinate, latitudinalMeters, longitudinalMeters)
setRegion(region, animated: true)
}
}
使用它
mapView.zoomToUserLocation()
或
mapView.zoomToUserLocation(latitudinalMeters:50,longitudinalMeters:50)
希望对您有所帮助
这是我编写的用于放大和缩小 WKInterfaceMap (WatchKit) 的代码,不小于其最小值 (0.0) 且不大于其最大值(世界地图的 width/height)——而且,在加速缩放的曲线上,你走得越远,缩放速度越小,你走得越近:
- (void)crownDidRotate:(WKCrownSequencer *)crownSequencer rotationalDelta:(double)rotationalDelta
{
span.latitudeDelta += ((rotationalDelta * rotationalDelta) * (rotationalDelta)) + (span.latitudeDelta * rotationalDelta);
span.longitudeDelta += ((rotationalDelta * rotationalDelta) * (rotationalDelta)) + (span.longitudeDelta * rotationalDelta);
span.latitudeDelta = (span.latitudeDelta < 0) ? 0 : (span.latitudeDelta > MKCoordinateRegionForMapRect(MKMapRectWorld).span.latitudeDelta) ? MKCoordinateRegionForMapRect(MKMapRectWorld).span.latitudeDelta : span.latitudeDelta;
span.longitudeDelta = (span.longitudeDelta < 0) ? 0 : (span.longitudeDelta > MKCoordinateRegionForMapRect(MKMapRectWorld).span.longitudeDelta) ? MKCoordinateRegionForMapRect(MKMapRectWorld).span.longitudeDelta : span.longitudeDelta;
MKCoordinateRegion visibleRegion = MKCoordinateRegionMake(PlanetaryHourDataSource.sharedDataSource.locationManager.location.coordinate, span);
[self.map setRegion:visibleRegion];
}
这不仅可以防止无效区域(并在达到最大和最小缩放级别时向用户发出指示),而且可以确保当地图显示更多细节时缩放速度减慢,反之亦然:
<iframe src="https://player.vimeo.com/video/313729712" width="640" height="1384" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
加速曲线是这样的:
以上答案提供了任意值,不一定对应于范围的任何一端。