GoogleマップSDKを使用してマップをレンダリングするIOSアプリを開発しています。私は実際にマップのレンダリングを処理する別のView Controllerを含むView Controllerを持っています。私が達成したいのは、ユーザーがマップカメラを動かしてタッチを終了した後に何らかのアクションを実行することです。この特定のケースに最適なオプションは、touchesEnded:withEvent: メソッドをオーバーライドすることであることがわかりました。含まれているView Controller内でこのメソッドをオーバーライドしていますが、何らかの理由で起動されていません。私の問題の原因は何ですか?
ところで mapView:idleAtCameraPosition: ユーザーが画面に触れたときにアクションを実行する必要があるため、私の要件に適合しません (マップの移動を停止します)
ここにいくつかのコードがあります。google maps SDK for IOS で提供されている例と基本的に同じです
インターフェース
#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>
#import <GoogleMaps/GoogleMaps.h>
@interface MTMapViewController : UIViewController <CLLocationManagerDelegate, GMSMapViewDelegate>
@property (nonatomic, strong) CLLocationManager *manager;
@end
実装
#import "MTMapViewController.h"
#import <GoogleMaps/Googlemaps.h>
#import <CoreLocation/CoreLocation.h>
@implementation MTMapViewController {
GMSMapView *mapView_;
GMSMarker *marker;
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)loadView {
[super loadView];
mapView_ = [GMSMapView mapWithFrame:CGRectZero camera:nil];
mapView_.delegate = self;
mapView_.myLocationEnabled = YES;
mapView_.mapType = kGMSTypeNormal;
mapView_.settings.myLocationButton = YES;
mapView_.settings.compassButton = YES;
self.view = mapView_;
self.manager = [[CLLocationManager alloc] init];
self.manager.delegate = self;
[self.manager startUpdatingLocation];
marker = [[GMSMarker alloc] init];
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
[manager stopUpdatingLocation];
CLLocation *currentLocation = [self.manager location];
GMSCameraPosition *camera = [GMSCameraPosition cameraWithTarget:currentLocation.coordinate
zoom:17];
mapView_.camera = camera;
marker.position = currentLocation.coordinate;
marker.icon = [UIImage imageNamed:@"passenger_marker.png"];
marker.map = mapView_;
}
- (void)mapView:(GMSMapView *)mapView didChangeCameraPosition:(GMSCameraPosition *)position {
marker.position = position.target;
}
- (void)mapView:(GMSMapView *)mapView idleAtCameraPosition:(GMSCameraPosition *)position {
NSLog(@"mapView:idleAtCameraPosition fired");
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
//This wont be invoked
NSLog(@"touchesEnded:withEvent: fired");
}
@end
ご協力ありがとうございました