Я реализовал распознаватель жестов в UIMapView
, как описано в принятом ответе на этот вопрос: Как перехватить события касаний в объектах MKMapView или UIWebView?
Одиночные касания распознаются правильно. Однако, когда я изменил суперкласс моего класса с UIGestureRecognizer
на UIPinchGestureRecognizer
для распознавания масштабирования карты, все перестало работать.
Теперь событие TouchesEnded происходит только тогда, когда пользователь дважды нажимает на аннотацию на карте (не знаю, почему!), И не происходит, когда пользователь сжимает карту (увеличение или уменьшение масштаба не имеет значения).
PS Я использую iOS SDK 4.3 и тестирую свое приложение в симуляторе, если это имеет значение.
Код mapViewController.m - метод viewDidLoad:
- (void)viewDidLoad
{
[super viewDidLoad];
MapGestureRecognizer *changeMapPositionRecognizer = [[MapGestureRecognizer alloc] init];
changeMapPositionRecognizer.touchesEndedCallback = ^(NSSet * touches, UIEvent * event)
{
...
};
[self.mapView addGestureRecognizer:changeMapPositionRecognizer];
[changeMapPositionRecognizer release];
}
Код MapGestureRecognizer.h:
#import <UIKit/UIKit.h>
typedef void (^TouchesEventBlock) (NSSet * touches, UIEvent * event);
@interface MapGestureRecognizer : UIPinchGestureRecognizer
@property(nonatomic, copy) TouchesEventBlock touchesEndedCallback;
@end
Код MapGestureRecognizer.m:
#import "MapGestureRecognizer.h"
@implementation MapGestureRecognizer
@synthesize touchesEndedCallback = _touchesEndedCallback;
- (id)init
{
self = [super init];
if (self) {
self.cancelsTouchesInView = NO;
}
return self;
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
if (self.touchesEndedCallback)
{
self.touchesEndedCallback(touches, event);
NSLog(@"Touches ended, callback done");
}
else
{
NSLog(@"Touches ended, callback skipped");
}
}
- (void) dealloc
{
[super dealloc];
}
@end
Что я должен исправить, чтобы сделать распознавание жеста щипка?