سؤال

كيف يمكنني اكتشاف صنبور واحد على مثيل MKMapViewب هل يجب علي تصنيف MKMapView ثم تجاوز touchesEnded طريقة؟

شكرًا،

- كريس

هل كانت مفيدة؟

نصائح أخرى

إذا كنت تبحث فقط الحصول على إخطار بإيماءات الصنبور دون التأثير على أي من سلوك اللمس الأخرى في الخريطة، فسوف ترغب في استخدام UITapGestureRecognizer. وبعد انها بسيطة للغاية، فقط وضعت في بعض الكود مثل هذا.

UITapGestureRecognizer* tapRec = [[UITapGestureRecognizer alloc] 
   initWithTarget:self action:@selector(didTapMap:)];
[theMKMapView addGestureRecognizer:tapRec];
[tapRec release];

سوف يسمي didTapMap كلما كان theMKMapView يتلقى إيماءة انقر فوق القرص، وسوف تعمل على إيماءات السحب تعمل كما فعلت من قبل.

العمل تماما على iOS 8

- (void)viewDidLoad 
    {
        [super viewDidLoad];

        UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:nil];
        doubleTap.numberOfTapsRequired = 2;
        doubleTap.numberOfTouchesRequired = 1;
        [self.mapView addGestureRecognizer:doubleTap];

        UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
        singleTap.numberOfTapsRequired = 1;
        singleTap.numberOfTouchesRequired = 1;
        [singleTap requireGestureRecognizerToFail: doubleTap];
        [self.mapView addGestureRecognizer:singleTap];
     }

   - (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer
     {
            if (gestureRecognizer.state != UIGestureRecognizerStateEnded)
                return;
            //Do your work ...
     }

أو اعتمادا على ما تحاول القيام به، أضف MKAnnotation (دفع دبوس، مع وجود شرح)، لذلك لديك شيء للاستفادة منه - ثم سوف تتلقى وفد خرائطك حدثا على سبيل المثال.

mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control

أنت غير قادر في هذا الوقت على اعتراض اللمسات على عرض الخريطة، يمكنك تجربة تخصيص طريقة عرض غير شفافة هناك ومعرفة ما إذا كان يلتقط اللمسات ...

فقط أضف بعض القصاصات التعليمات البرمجية كما التوضيح من الإجابة @ TT-Kilew. في حالتي، أريد أن أشير المستخدم إلى نفسه على الخريطة ولكن لا أراد مقاطعة لمسة السحب.

@interface PrettyViewController () <MKMapViewDelegate>

@property (weak, nonatomic) IBOutlet MKMapView *mapView;
@property (assign, nonatomic) BOOL userTouchTheMap;

@end

@implementation PrettyViewController

#pragma mark - UIResponder

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    [super touchesBegan:touches withEvent:event];

    self.userTouchTheMap = [[touches anyObject].view isEqual:self.mapView];
}


#pragma mark - MKMapViewDelegate

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation {
    //We just positioning to user
    if (!self.userTouchTheMap) {
        CLLocationDistance radius = 5000;
        [self.mapView setRegion:MKCoordinateRegionMakeWithDistance(userLocation.location.coordinate, 2*radius, 2*radius) animated:YES];
    }
}

@end

لا شيء وجدته في أي وقت مضى، لكنني توصلت إلى هذا الحل الذي لم يفترض: في ViewDidLoad

let singleTapRecognizer = UITapGestureRecognizer(target: self, action: #selector(onMapClicked))
singleTapRecognizer.delegate = self
mapView.addGestureRecognizer(singleTapRecognizer)

في مندوب:

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
    return touch.view!.frame.equalTo(mapView.frame)
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top