我正在尝试从允许用户将照片拍摄到另一个我有地图的视图的屏幕上传输用户位置。这样做的目的是标记地图上的图像位置并使其与图像相关。我用于启动拍摄图像的能力的当前代码如下:
- (IBAction)takePhoto:(UIButton *)sender {
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
[self presentViewController:picker animated:YES completion: NULL];
}
-(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
// Pin location as annotation on map
NSString *dateString = [NSDateFormatter localizedStringFromDate:[NSDate date]
dateStyle:NSDateFormatterShortStyle
timeStyle:NSDateFormatterFullStyle];
MKPointAnnotation *point = [[MKPointAnnotation alloc] init];
MKUserLocation *userLocation = [[MKUserLocation alloc] init];
MKMapView *mapView = [[MKMapView alloc] init];
point.coordinate = userLocation.coordinate;
point.title = @"Picture Entry";
point.subtitle = dateString;
[mapView addAnnotation:point];
// Close camera and go back to home screen
[self dismissModalViewControllerAnimated:YES];
}
我是iOS编程的新手,我不知道如何将该位置传回我的mapView,我相信这段代码我只是初始化一个新地图来保存注释\ n来,这不是我想要的东西。
MapViewController.h
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
@interface MapViewController : UIViewController <MKMapViewDelegate>
@property (strong, nonatomic) IBOutlet MKMapView *mapView;
@end
MapViewController.m
#import "MapViewController.h"
@interface MapViewController ()
@end
@implementation MapViewController
@synthesize mapView;
- (void)viewDidLoad
{
// Get user location
mapView.showsUserLocation = YES;
self.mapView.delegate = self;
}
// Update map based on user location and zoom to area
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:
(MKUserLocation *)userLocation
{
mapView.centerCoordinate = userLocation.location.coordinate;
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(userLocation.coordinate, 800, 800);
[self.mapView setRegion:[self.mapView regionThatFits:region] animated:YES];
}
@end
这就是我现在所拥有的,我对如何处理这件事感到茫然。
答案 0 :(得分:0)
我相信这段代码我只是初始化一个新地图来保存注释,而这显然不是我想要的。
您是对的 - 您正在创建新地图并将注释添加到该对象。 (另外,您还没有正确创建地图视图 - 您应该使用-initWithFrame:
,因为它是指定的视图初始值设定项。)
你应该重新考虑你的方法。您似乎要做的是从不同的视图控制器修改一个视图控制器(您的MapViewController
)的地图视图(假设图像选择器委托是除MapViewController
以外的某个视图控制器) 。视图控制器应该负责自己的视图,但不应该弄乱另一个视图控制器的视图。此外,添加注释方式意味着您有效地将位置存储在地图视图中,您应该避免使用视图来存储数据。
相反,请考虑一下您应该在哪里保存数据。 MVC中的M用于模型,即管理数据的应用程序的那部分。正如您在首字母缩略词中看到的那样,它应该与您的视图和控制器分开。该模型是您的各种视图控制器都可以用来获取所需信息的模型,并且让您的应用程序更简单,因为您不必担心在视图控制器之间来回发送数据。该模型不一定非常复杂 - 对于主要管理项目列表的非常简单的应用程序,即使是普通的旧NSArray或NSSet也可以作为数据模型。为需要它的每个视图控制器提供对模型或模型的一部分的引用。
考虑到这一点,修复应用程序的正确方法是使用某种数据模型。图像选择器委托应通过向模型添加信息来更新地图。地图视图控制器应负责向地图视图添加注释,并且可以根据模型中的信息执行此操作。