पिन करते समय केंद्र समन्वय बनाए रखें यदि आप डिवाइस के स्थान को ट्रैक करते समय ऐप्पल के मैप्स एप्लिकेशन में ज़ूम इन/आउट करने के लिए चुटकी करते हैं, तो चुटकी इशारा के "पैन" घटक को अनदेखा किया जाता है और नीली स्थान सूचक केंद्र के केंद्र में स्थिर रहता है स्क्रीन। सादा 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]];
इसके परिणामस्वरूप ऊपर वर्णित वही प्रतिपादन समस्याएं हुईं: मानचित्र दृश्य का केंद्र अक्सर उपयोगकर्ता के स्थान के बीच वैकल्पिक होता है और जहां इशारा पहचानकर्ता अपना कोर्स चलाते हैं। शायद मैंने आपके उत्तर को गलत समझा है? मैंने यहां अपने 'यूआईपीएनजेस्टर रिकॉग्नाइज़र' सबक्लास के कार्यान्वयन को पोस्ट किया है: http://pastie.org/1934011 –
यह चाल है! मुझे खुशी है कि समाधान इतना आसान था। धन्यवाद, स्कॉट। –