如果捏在蘋果的地圖應用程序中放大/縮小,跟蹤設備的位置,捏手勢的「平移」組件將被忽略,藍色位置指示器保持固定在屏幕。當使用普通的MKMapView
時,情況並非如此。保持中心座標,同時捏MKMapView
假設我已經有用戶的位置,我怎麼能達到這個效果?我嘗試重置代表的regionDid/WillChangeAnimated:
方法中的中心座標,但它們只在手勢的開始和結束處被調用。我還嘗試添加一個UIPinchGestureRecognizer
子類,當觸摸移動時重置中心座標,但這導致呈現毛刺。
編輯:對於那些有興趣誰,對我下面的作品。
// CenterGestureRecognizer.h
@interface CenterGestureRecognizer : UIPinchGestureRecognizer
- (id)initWithMapView:(MKMapView *)mapView;
@end
// CenterGestureRecognizer.m
@interface CenterGestureRecognizer()
- (void)handlePinchGesture;
@property (nonatomic, assign) MKMapView *mapView;
@end
@implementation CenterGestureRecognizer
- (id)initWithMapView:(MKMapView *)mapView {
if (mapView == nil) {
[NSException raise:NSInvalidArgumentException format:@"mapView cannot be nil."];
}
if ((self = [super initWithTarget:self action:@selector(handlePinchGesture)])) {
self.mapView = mapView;
}
return self;
}
- (BOOL)canBePreventedByGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer {
return NO;
}
- (BOOL)canPreventGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer {
return NO;
}
- (void)handlePinchGesture {
CLLocation *location = self.mapView.userLocation.location;
if (location != nil) {
[self.mapView setCenterCoordinate:location.coordinate];
}
}
@synthesize mapView;
@end
然後簡單地把它添加到您的MKMapView
:
[self.mapView addGestureRecognizer:[[[CenterGestureRecognizer alloc] initWithMapView:self.mapView] autorelease]];
這導致了與上面提到的相同的渲染問題:地圖視圖的中心在用戶的位置和手勢識別器運行其路線的位置之間頻繁交替。 也許我誤解了你的答案?我已經在這裏發佈了我的'UIPanGestureRecognizer'子類的實現:http://pastie.org/1934011 – 2011-05-20 23:35:54
這就實現了!我很高興解決方案非常簡單。謝謝,斯科特。 – 2011-05-21 01:59:53