Usando o AVSpeechSynthesizer para ler uma descrição da localização em um Mapa
Meu mapa tem 4 ou 5 pontos próximos um do outro e agora, usando o AVSpeechSynthesizer, eu o tenho para que ele diga o nome do local (que também é exibido em uma pequena bolha).
Quero que ele ainda mostre essa bolha, mas, quando clicado, quero que faça uma descrição do local que eu especificaria. Este é o meu código no momento:
MapViewAnnotation.h
@interface MapViewAnnotation : NSObject <MKAnnotation> {
NSString *title;
CLLocationCoordinate2D coordinate;
NSString *desc;
}
@property (nonatomic, copy) NSString *title;
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;
@property (nonatomic, readonly) NSString *desc;
- (id)initWithTitle:(NSString *)ttl andCoordinate:(CLLocationCoordinate2D)c2d initWithDesc:(NSString *)dsc;
MapViewAnnotation.m
@implementation MapViewAnnotation
@synthesize title, coordinate, desc;
- (id)initWithTitle:(NSString *)ttl andCoordinate:(CLLocationCoordinate2D)c2d initWithDesc:(NSString *)dsc {
[super init];
title = ttl;
coordinate = c2d;
desc = dsc;
return self;
MapViewController.h
@interface MapViewController : UIViewController {
MKMapView *mapView;
}
@property (nonatomic, retain) IBOutlet MKMapView *mapView;
@property (strong, nonatomic) AVSpeechSynthesizer *synthesizer;
MapViewController.m
- (void)viewDidLoad
{
// Set some coordinates for our position : Cutty Sark
CLLocationCoordinate2D location;
location.latitude = (double) 51.482997;
location.longitude = (double) -0.010072;
// Royal Observatory
CLLocationCoordinate2D twoLocation;
twoLocation.latitude = (double) 51.477805;
twoLocation.longitude = (double) -0.001430;
//Royal Naval College
CLLocationCoordinate2D threeLocation;
threeLocation.latitude = (double) 51.483344;
threeLocation.longitude = (double) -0.006799;
//Queen's House
CLLocationCoordinate2D fourLocation;
fourLocation.latitude = (double) 51.481383;
fourLocation.longitude = (double) -0.003722;
//National Maritime Museum
CLLocationCoordinate2D fiveLocation;
fiveLocation.latitude = (double) 51.481050;
fiveLocation.longitude = (double) -0.005578;
// Add Cutty Sark annotation to MapView
MapViewAnnotation *newAnnotation = [[MapViewAnnotation alloc] initWithTitle:@"Cutty Sark" andCoordinate:location initWithDesc:@"Description about Cutty Sark"];
[self.mapView addAnnotation:newAnnotation];
self.mapView.delegate = self;
[newAnnotation release];
// Add Royal Observatory annotation to MapView
newAnnotation = [[MapViewAnnotation alloc] initWithTitle:@"Royal Observatory" andCoordinate:twoLocation initWithDesc:@"Description about Cutty Sark"];
[self.mapView addAnnotation:newAnnotation];
[newAnnotation release];
// Add Royal Naval College annotation to MapView
newAnnotation = [[MapViewAnnotation alloc] initWithTitle:@"Royal Naval College" andCoordinate:threeLocation initWithDesc:@"Description about Cutty Sark"];
[self.mapView addAnnotation:newAnnotation];
[newAnnotation release];
// Add Queen's House annotation to MapView
newAnnotation = [[MapViewAnnotation alloc] initWithTitle:@"Queen's House" andCoordinate:fourLocation initWithDesc:@"Description about Cutty Sark"];
[self.mapView addAnnotation:newAnnotation];
[newAnnotation release];
// Add National Maritime Museum annotation to MapView
newAnnotation = [[MapViewAnnotation alloc] initWithTitle:@"National Maritime Museum" andCoordinate:fiveLocation initWithDesc:@"Description about Cutty Sark"];
[self.mapView addAnnotation:newAnnotation];
[newAnnotation release];
}
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)anView
{
AVSpeechSynthesizer *synthesizer = [[AVSpeechSynthesizer alloc]init];
AVSpeechUtterance *utterance = [AVSpeechUtterance speechUtteranceWithString:((MapViewAnnotation *)anView).desc];
[utterance setRate:0.5];
[synthesizer speakUtterance:utterance];
}
// When a map annotation point is added, zoom to it (1500 range)
- (void)mapView:(MKMapView *)mv didAddAnnotationViews:(NSArray *)views
{
MKAnnotationView *annotationView = [views objectAtIndex:0];
id <MKAnnotation> mp = [annotationView annotation];
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance([mp coordinate], 1500, 1500);
[mv setRegion:region animated:YES];
//[mv selectAnnotation:mp animated:YES];
}
Qualquer ajuda seria apreciada!
EDITAR Aqui está o NSLog: