এমকেম্যাপভিউকে টেনে নিয়ে / সরানো হয়েছে কিনা তা নির্ধারণ করুন


84

কোনও এমকেম্যাপভিউকে চারপাশে টেনে আনা হয়েছে কিনা তা নির্ধারণ করার কোনও উপায় আছে?

যখনই কোনও ব্যবহারকারী ব্যবহার করে মানচিত্র টেনে নিয়ে যায় তখন আমি কেন্দ্রের অবস্থানটি পেতে চাই CLLocationCoordinate2D centre = [locationMap centerCoordinate]; আমি চাই তবে আমার কোনও প্রতিনিধি পদ্ধতি বা এমন কিছু দরকার যা ব্যবহারকারীর সাথে মানচিত্রটি ঘুরে দেখার সাথে সাথে আগুন লাগবে।

আগাম ধন্যবাদ

উত্তর:


21

MKMapViewDelegate রেফারেন্স।

বিশেষত, এই পদ্ধতিগুলি কার্যকর হতে পারে:

- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated

আপনার মানচিত্রের দর্শনের প্রতিনিধি সম্পত্তি সেট করা আছে যাতে নিশ্চিত হয়ে যায় যে সেই পদ্ধতিগুলি কল করা যায়।


4
অনেক ধন্যবাদ. - (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animatedকাজটি করেছে
hgbnerd

4
দুর্দান্ত সমাধান। ব্যবহারকারীর অবস্থান পরিবর্তন হলে মানচিত্রে টীকাগুলি পুনরায় লোড করার জন্য উপযুক্ত
আলেজান্দ্রো লুয়েংগো

178
-1 কারণ ব্যবহারকারী মানচিত্রটি টেনে আনলে এই সমাধান আপনাকে জানায় না। অঞ্চলটি উইল চ্যাঞ্জ অ্যানিমেটেড হয় যদি ব্যবহারকারী ডিভাইসটি ঘোরান বা অন্য কোনও পদ্ধতি মানচিত্রকে জুম করে তোলে তবে টেনে নেওয়ার প্রতিক্রিয়া হিসাবে নয়।
কমাটোস্ট ২

ধন্যবাদ @ কমোস্টে আমি এই 'উত্তর' নিয়ে একই সমস্যা পেয়েছি
চতুর

4
@ মোবি'র সমাধানটি মানচিত্রের অভ্যন্তরীণ অঙ্গভঙ্গি সনাক্তকারীকে পরীক্ষা করে ব্যবহারকারীর অঙ্গভঙ্গিগুলি (হ্যাঁ, সবগুলি) সনাক্ত করে। সুন্দর!
ফেলিক্স আলকালা

238

অঞ্চলটি কোনও কারণে পরিবর্তিত হলে গৃহীত উত্তরের কোডটি দগ্ধ হয়। কোনও মানচিত্রের টানাকে সঠিকভাবে সনাক্ত করতে আপনাকে একটি ইউআইপিএনজেস্টাররেকগনিজার যুক্ত করতে হবে। বিটিডব্লিউ, এটি হ'ল টানা অঙ্গভঙ্গি সনাক্তকারী (প্যানিং = টেনে আনার)।

পদক্ষেপ 1: ভিউডিডলয়েডে অঙ্গভঙ্গি সনাক্তকারী যুক্ত করুন:

-(void) viewDidLoad {
    [super viewDidLoad];
    UIPanGestureRecognizer* panRec = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(didDragMap:)];
    [panRec setDelegate:self];
    [self.mapView addGestureRecognizer:panRec];
}

পদক্ষেপ 2: প্রোটোকল ইউআইজিএসচাররনগনিজারডেলিগেটটি ভিউ কন্ট্রোলারে যুক্ত করুন যাতে এটি প্রতিনিধি হিসাবে কাজ করে।

@interface MapVC : UIViewController <UIGestureRecognizerDelegate, ...>

পদক্ষেপ 3: এবং এমকেএম্যাপভিউতে ইতিমধ্যে বিদ্যমান অঙ্গভঙ্গি সনাক্তকারীদের সাথে কাজ করার জন্য ইউআইপিএনগাস্টারআরগনাইজারের জন্য নিম্নলিখিত কোড যুক্ত করুন:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return YES;
}

পদক্ষেপ 4: আপনি যদি একবার প্রতি টেনে 50 বার একবার নিজের পদ্ধতিতে কল করতে চান, তবে আপনার নির্বাচকটিতে "টানা শেষ" অবস্থাটি সনাক্ত করুন:

- (void)didDragMap:(UIGestureRecognizer*)gestureRecognizer {
    if (gestureRecognizer.state == UIGestureRecognizerStateEnded){
        NSLog(@"drag ended");
    }
}

আমি জানি এটি মোটামুটি পুরানো পোস্ট তবে উপরে আপনার ধারণাটি আমি পছন্দ করি, আমি আমার প্রয়োগের মাধ্যমে অঞ্চলটি ডিডচ্যাঞ্জ পদ্ধতিতে নিজের অ্যাপ্লিকেশনটি সংগঠিত করার লড়াই করেছি এবং যখন আমি এটি দেখতে পেয়েছি তখন এটি সমস্ত ক্লিক করা হয়েছে এবং আপনি এতটাই ঠিক বলেছেন যে অঞ্চলটি কোনও কারণেই ডাইড চেঞ্জের কাজ শুরু করেছে। এর সাথে আদর্শ নয় আমি ম্যাপটি পেতে পারি ঠিক তাই করতে চাই যা আমি এর জন্য কুডোসকে চাই!
অ্যালেক্স ম্যাকফারসন

4
আপনি যদি পিঞ্চগুলিও ধরতে চান তবে আপনি UIPinchGestureRecognizerপাশাপাশি যুক্ত করতে চান
গ্রেগরি কসমো হান

32
দ্রষ্টব্য যে মানচিত্রের দৃশ্য স্ক্রোলটি গতি বহন করে এবং উপরের উদাহরণটি অঙ্গভঙ্গিটি শেষ হওয়ার সাথে সাথে বন্ধ করা হবে তবে মানচিত্রের দৃশ্যটি চলন্ত থামার আগেই। আরও ভাল উপায় হতে পারে তবে আমি যা করেছি তা ইঙ্গিতটি বন্ধ হয়ে গেলে একটি পতাকা সেট করে readyForUpdateএবং তারপরে সেই পতাকাটি চেক করে - (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
টিভিন

14
নোট করুন যে ব্যবহারকারী জুম করতে এক বা দুটি আঙুলের ডাবল ট্যাপ করতে পারে যা অঞ্চল পরিবর্তন করবে তবে এই প্যানটিকে সনাক্তকারী হিসাবে ডাকে না।
সোমগুয়ে

4
এই সমাধানটি নীচে কেন? এটি সেরা! হ্যাঁ @ মুবির সমাধানটি সহজ তবে এটি নিরাপদ।
লেসেলি গডউইন

77

এই একমাত্র উপায় যা আমার পক্ষে কাজ করেছিল যা প্যানটি সনাক্ত করতে পাশাপাশি ব্যবহারকারীর দ্বারা শুরু করা জুম পরিবর্তনগুলি সনাক্ত করে:

- (BOOL)mapViewRegionDidChangeFromUserInteraction
{
    UIView *view = self.mapView.subviews.firstObject;
    //  Look through gesture recognizers to determine whether this region change is from user interaction
    for(UIGestureRecognizer *recognizer in view.gestureRecognizers) {
        if(recognizer.state == UIGestureRecognizerStateBegan || recognizer.state == UIGestureRecognizerStateEnded) {
            return YES;
        }
    }

    return NO;
}

static BOOL mapChangedFromUserInteraction = NO;

- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
{
    mapChangedFromUserInteraction = [self mapViewRegionDidChangeFromUserInteraction];

    if (mapChangedFromUserInteraction) {
        // user changed map region
    }
}

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
    if (mapChangedFromUserInteraction) {
        // user changed map region
    }
}

4
এটি আমার পক্ষে কাজ করে তবে এটি লক্ষ করা উচিত যে এটি MKMapViewআইওএসের অভ্যন্তরীণ বাস্তবায়নের উপর নির্ভরশীল । এই প্রয়োগটি কোনও আইওএস আপডেটে পরিবর্তিত হতে পারে কারণ এটি এপিআইয়ের অংশ নয় part
প্রোগ্রামার

এটি কাজ করে এবং আমি অগ্রণী উত্তরের চেয়ে এটি পছন্দ করি কারণ এটি সেখানে কীভাবে পরিবর্তন করে না।
কিয়েড

কোড বনাম ব্যবহারকারীর মানচিত্রের কারসাজির মার্জিত সমাধানের জন্য ধন্যবাদ।
djneely

32

(কেবলমাত্র) @ মুবির দুর্দান্ত সমাধানের সুইফ্ট সংস্করণ :

private var mapChangedFromUserInteraction = false

private func mapViewRegionDidChangeFromUserInteraction() -> Bool {
    let view = self.mapView.subviews[0]
    //  Look through gesture recognizers to determine whether this region change is from user interaction
    if let gestureRecognizers = view.gestureRecognizers {
        for recognizer in gestureRecognizers {
            if( recognizer.state == UIGestureRecognizerState.Began || recognizer.state == UIGestureRecognizerState.Ended ) {
                return true
            }
        }
    }
    return false
}

func mapView(mapView: MKMapView, regionWillChangeAnimated animated: Bool) {
    mapChangedFromUserInteraction = mapViewRegionDidChangeFromUserInteraction()
    if (mapChangedFromUserInteraction) {
        // user changed map region
    }
}

func mapView(mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
    if (mapChangedFromUserInteraction) {
        // user changed map region
    }
}

4
দেখতে বেশ ভাল লাগছে, তবে আমাকে self.mapView.subviews[0]self.mapView.subviews[0] as! UIView
kmurph79

4
এই (এবং মুবির) সমাধানটি এত দুর্দান্ত নয়। কোনও গ্যারান্টি নেই যে অ্যাপল ম্যাপভিউগুলি প্রথম সাবভিউ সংরক্ষণ করবে। কিছু ভবিষ্যতের সংস্করণে, মানচিত্রের প্রথম সাবভিউটি কোনও ইউআইভিউ হবে না। সুতরাং আপনার কোড ক্র্যাশ প্রতিরোধকারী নয়। আপনার নিজের অঙ্গভঙ্গি সনাক্তকারীকে ম্যাপভিউতে যুক্ত করার চেষ্টা করুন।
সমেত ডেড করুন

4
দ্রষ্টব্য, এই কাজটি পেতে আমাকে self.map.delegate = selfডিডলড
টাইলার এসএফ

17

উপরের দিকে জ্যানোর উত্তরের 3 টি সমাধান :

আপনার ভিউকন্ট্রোলারের সাথে প্রোটোকল ইউআইজিস্টচাররনগনাইজারডেলিগেট যুক্ত করুন

class MyViewController: UIViewController, UIGestureRecognizerDelegate

ইউআইপিএনগাস্টারআর সনাক্তকারীকে তৈরি করুন viewDidLoadএবং delegateনিজের কাছে সেট করুন

viewDidLoad() {
    // add pan gesture to detect when the map moves
    let panGesture = UIPanGestureRecognizer(target: self, action: #selector(self.didDragMap(_:)))

    // make your class the delegate of the pan gesture
    panGesture.delegate = self

    // add the gesture to the mapView
    mapView.addGestureRecognizer(panGesture)
}

একটি প্রোটোকল পদ্ধতি যুক্ত করুন যাতে আপনার অঙ্গভঙ্গি সনাক্তকারী বিদ্যমান এমকেম্যাপভিউ অঙ্গভঙ্গিগুলির সাথে কাজ করবে

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
}

আপনার প্যান ইশারায় নির্বাচক দ্বারা কল করা হবে এমন পদ্ধতিটি যুক্ত করুন

func didDragMap(_ sender: UIGestureRecognizer) {
    if sender.state == .ended {

        // do something here

    }
}

এটিই সমাধান! ধন্যবাদ!
হিলালকাহ

8

আমার অভিজ্ঞতাতে, "টাইপ করার সময় অনুসন্ধানের" অনুরূপ, আমি খুঁজে পেলাম একটি টাইমার হ'ল সবচেয়ে নির্ভরযোগ্য সমাধান। এটি প্যানিং, চিম্টি, ঘোরা, ট্যাপিং, ডাবল ট্যাপিং ইত্যাদির জন্য অতিরিক্ত অঙ্গভঙ্গি সনাক্তকারী যুক্ত করার প্রয়োজনীয়তা সরিয়ে দেয়

সমাধানটি সহজ:

  1. যখন মানচিত্রের অঞ্চল পরিবর্তন হয়, টাইমার সেট / রিসেট করুন
  2. যখন টাইমার গুলি চালায় তখন নতুন অঞ্চলের জন্য লোড মার্কার

    import MapKit
    
    class MyViewController: MKMapViewDelegate {
    
        @IBOutlet var mapView: MKMapView!
        var mapRegionTimer: NSTimer?
    
        // MARK: MapView delegate
    
        func mapView(mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
            setMapRegionTimer()
        }
    
        func setMapRegionTimer() {
            mapRegionTimer?.invalidate()
            // Configure delay as bet fits your application
            mapRegionTimer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "mapRegionTimerFired:", userInfo: nil, repeats: false)
        }
    
        func mapRegionTimerFired(sender: AnyObject) {
            // Load markers for current region:
            //   mapView.centerCoordinate or mapView.region
        }
    
    }
    

7

আর একটি সম্ভাব্য সমাধান হ'ল স্পর্শগুলি প্রয়োগ করুন: (বা স্পর্শযুক্ত :, ইত্যাদি) আপনার মানচিত্রের দৃশ্যটি ধারণ করে এমন দৃশ্যের নিয়ামকটিতে:

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    [super touchesMoved:touches withEvent:event];

    for (UITouch * touch in touches) {
        CGPoint loc = [touch locationInView:self.mapView];
        if ([self.mapView pointInside:loc withEvent:event]) {
            #do whatever you need to do
            break;
        }
    }
}

এটি কিছু ক্ষেত্রে ইশারা শনাক্তকারীদের ব্যবহারের চেয়ে সহজ হতে পারে।


6

আপনি ইন্টারফেস বিল্ডারে আপনার মানচিত্রে একটি অঙ্গভঙ্গি সনাক্তকারীও যুক্ত করতে পারেন। আপনার ভিউকন্ট্রোলারে এটির ক্রিয়াকলাপের জন্য এটি কোনও আউটলেটে লিঙ্ক করুন, আমি আমার "ম্যাপড্রেজ" ডাকলাম ...

তারপরে আপনি নিজের ভিউ কন্ট্রোলারের। মি তে এরকম কিছু করবেন:

- (IBAction)mapDrag:(UIPanGestureRecognizer *)sender {
    if(sender.state == UIGestureRecognizerStateBegan){
        NSLog(@"drag started");
    }
}

আপনারও এটি আছে তা নিশ্চিত করুন:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return YES;
}

অবশ্যই কাজটি করার জন্য আপনাকে নিজের ভিউ কনট্রোলারকে আপনার .h ফাইলে একটি UIGestureRecognizerDelegate করতে হবে।

অন্যথায় মানচিত্রের প্রতিক্রিয়াশীল একমাত্র ইশারা ইভেন্টটি শুনেন।


স্টোরিবোর্ড সমাধানের জন্য উপযুক্ত। ভাল কাজUIGestureRecognizerStateBegan
জাকব

5

মানচিত্রের ভিউতে কোনও অঙ্গভঙ্গি কখন শেষ হয়েছে তা সনাক্ত করতে:

[ https://web.archive.org/web/20150215221143/http://b2cloud.com.au/tutorial/mkmapview-determining-whether-region- بدل-is-from-user-interation/ )

এটি কেবল জুম / ঘোরানো / মানচিত্রটিকে টেনে নিয়ে যাওয়ার পরে কেবল একটি ডাটাবেস ক্যোয়ারী সম্পাদনের জন্য খুব দরকারী।

আমার জন্য, অঞ্চল -DidChange অ্যানিমেটেড পদ্ধতিটি কেবল অঙ্গভঙ্গিটি সম্পন্ন হওয়ার পরে ডাকা হয়েছিল এবং টানা / জুমিং / ঘোরানোর সময় বহুবার ফোন করা হয়নি, তবে এটি কোনও ইশারার কারণে হয়েছে কি না তা জানার জন্য এটি দরকারী।



এই পদ্ধতিটি আমার পক্ষে কাজ করে নি। কোড থেকে মানচিত্রের অঞ্চল পরিবর্তন হওয়ার সাথে সাথে এটি ট্রিগার করে যে এটি ব্যবহারকারীর কাছ থেকে ...
মাকসিম নিয়াজেভ

5

এই সমাধানগুলির অনেকগুলি হ্যাকির উপর / সুইফ্টের উদ্দেশ্য কী নয়, তাই আমি একটি ক্লিনার সমাধানের জন্য বেছে নিয়েছি।

আমি কেবল এমকেম্যাপভিউ এবং উপশ্রুত স্পর্শমোভডকে সাবক্লাস করি। যদিও এই স্নিপেটটি এটি অন্তর্ভুক্ত করে না, আমি আন্দোলনের বিষয়ে আপনার যা যা তথ্য চান তা পাস করার জন্য একটি প্রতিনিধি বা বিজ্ঞপ্তি তৈরি করার পরামর্শ দেব।

import MapKit

class MapView: MKMapView {
    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
        super.touchesMoved(touches, with: event)

        print("Something moved")
    }
}

এই সাবক্লাসটি নির্দেশ করতে আপনাকে আপনার স্টোরিবোর্ড ফাইলগুলিতে শ্রেণি আপডেট করতে হবে, পাশাপাশি অন্য উপায়ে তৈরি করা কোনও মানচিত্র পরিবর্তন করতে হবে।

মন্তব্যে উল্লিখিত হিসাবে, অ্যাপল সাবক্লাসিংয়ের ব্যবহারকে নিরুৎসাহিত করে MKMapView। যদিও এটি বিকাশকারীদের বিবেচনার বিবেচনায় আসে, এই নির্দিষ্ট ব্যবহার মানচিত্রের আচরণকে পরিবর্তন করে না এবং তিন বছরেরও বেশি সময় ধরে আমার জন্য কোনও ঘটনা ছাড়াই কাজ করেছে। যাইহোক, অতীত কর্মক্ষমতা ভবিষ্যতের সামঞ্জস্যতা নির্দেশ করে না, তাই সতর্কতা অবলম্বনকারী


4
এটি সেরা সমাধান মত মনে হচ্ছে। আমি এটি পরীক্ষা করেছি এবং মনে হচ্ছে ঠিক আছে। আমি মনে করি অন্যের পক্ষে সচেতন হওয়া ভাল যে অ্যাপল এমকেম্যাপভিউ সাবক্লাস না করার পরামর্শ দিয়েছেন: "যদিও আপনাকে নিজে এমকেম্যাপভিউ ক্লাসটি সাবক্লাস করা উচিত নয়, তবে আপনি একটি প্রতিনিধি বস্তু সরবরাহ করে মানচিত্রের দৃষ্টিভঙ্গি সম্পর্কে তথ্য পেতে পারেন।" লিঙ্ক: বিকাশকারী / অ্যাপ্লিকেশন / ডকুমেন্টেশন / ম্যাপকিট / এমকেম্যাপভিউ । তবে এমকেম্যাপভিউ সাবক্লাস না করার বিষয়ে তাদের পরামর্শকে উপেক্ষা করার বিষয়ে আমার দৃ opinion় মতামত নেই এবং আমি এ সম্পর্কিত অন্যদের কাছ থেকে আরও জানতে আগ্রহী।
আন্দ্রেজ

4
"এটি সেরা সমাধানের মতো বলে মনে হচ্ছে যদিও অ্যাপল বলেছে এটি করবেন না" বলে মনে হচ্ছে এটি সেরা সমাধান নয়।
dst3p

4

যদি মিথ্যা হয় তবে ব্যবহারকারীর টানা টানা মানচিত্রটি আপনি অ্যানিমেটেড সম্পত্তিটি পরীক্ষা করতে পারেন

 func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
    if animated == false {
        //user dragged map
    }
}

ব্যবহারকারী জুমড মানচিত্র থাকতে পারে।
ভিক্টর এঙ্গেল

3

জ্যানোর উত্তর আমার পক্ষে কাজ করেছে, তাই আমি ভেবেছিলাম আমি সুইফট 4 / এক্সকোড 9 এর জন্য একটি আপডেট সংস্করণ রেখে যাব কারণ আমি উদ্দেশ্য সি তে বিশেষ দক্ষ নই এবং আমি নিশ্চিত যে আরও কয়েকজন আছে যা এখনও নেই।

পদক্ষেপ 1: দ্যডলিডে এই কোডটি যুক্ত করুন:

let panGesture = UIPanGestureRecognizer(target: self, action: #selector(didDragMap(_:)))
panGesture.delegate = self

পদক্ষেপ 2: নিশ্চিত করুন যে আপনার শ্রেণিটি ইউআইজিস্টেকার সনাক্তকারী ডেলিগেটের সাথে সম্মত হয়েছে:

class MapViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate, UIGestureRecognizerDelegate {

পদক্ষেপ 3: আপনার প্যানস্টেচার অন্যান্য অঙ্গভঙ্গির সাথে একযোগে কাজ করবে তা নিশ্চিত করতে নিম্নলিখিত ফাংশন যুক্ত করুন:

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
}

পদক্ষেপ 4: এবং জানো যথাযথভাবে উল্লেখ করেছেন বলে আপনার পদ্ধতিটি নিশ্চিত করে "প্রতি টেনে 50 বার" বলা হয় না:

@objc func didDragMap(_ gestureRecognizer: UIPanGestureRecognizer) {
    if (gestureRecognizer.state == UIGestureRecognizerState.ended) {
        redoSearchButton.isHidden = false
        resetLocationButton.isHidden = false
    }
}

* শেষ পদক্ষেপে @objc যোগ করার বিষয়টি নোট করুন। সংকলনের জন্য এক্সকোড আপনার ক্রিয়ায় এই উপসর্গটিকে বাধ্য করবে force


2

আমি জানি এটি একটি পুরানো পোস্ট তবে এখানে আমার জানোয়ারের উত্তর 4/5 কোডটির প্যান এবং পিঞ্চ অঙ্গভঙ্গি।

class MapViewController: UIViewController, MapViewDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

        let panGesture = UIPanGestureRecognizer(target: self, action: #selector(self.didDragMap(_:)))
        let pinchGesture = UIPinchGestureRecognizer(target: self, action: #selector(self.didPinchMap(_:)))
        panGesture.delegate = self
        pinchGesture.delegate = self
        mapView.addGestureRecognizer(panGesture)
        mapView.addGestureRecognizer(pinchGesture)
    }

}

extension MapViewController: UIGestureRecognizerDelegate {

    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        return true
    }

    @objc func didDragMap(_ sender: UIGestureRecognizer) {
        if sender.state == .ended {
            //code here
        }
    }

    @objc func didPinchMap(_ sender: UIGestureRecognizer) {
        if sender.state == .ended {
            //code here
        }
    }
}

উপভোগ করুন!


যেমনটি আগে বলা হয়েছিল এটি জুমগুলিকে স্বীকৃতি দেয় না তবে এটি বেশিরভাগের জন্য ভাল যথেষ্ট হওয়া উচিত।
স্কুয়া

1

আমি মানচিত্রের কেন্দ্রে একটি টীকা দেওয়ার চেষ্টা করছিলাম যা ব্যবহারগুলি যাই করুক না কেন মানচিত্রের কেন্দ্রে সর্বদা থাকে। আমি উপরে উল্লিখিত বেশ কয়েকটি পদ্ধতির চেষ্টা করেছি এবং সেগুলির কোনওটিই যথেষ্ট ভাল ছিল না। শেষ পর্যন্ত আমি এটিকে সমাধান করার একটি খুব সহজ উপায় খুঁজে পেয়েছি, আন্নার উত্তর থেকে ধার নিয়ে এবং এনেকোর উত্তরটির সাথে একত্রিত করে। এটি মূলত অঞ্চলটিকে উইল চ্যাঞ্জএন্ড অ্যানিমেটেডটিকে একটি টেনে আনার সূচনা হিসাবে বিবেচনা করে, এবং অঞ্চলডিজ চ্যাঞ্জএন্ডটির শেষ হিসাবে অ্যানিমেটেড করে এবং রিয়েল-টাইমে পিন আপডেট করার জন্য একটি টাইমার ব্যবহার করে:

var mapRegionTimer: Timer?
public func mapView(_ mapView: MKMapView, regionWillChangeAnimated animated: Bool) {
    mapRegionTimer?.invalidate()
    mapRegionTimer = Timer.scheduledTimer(withTimeInterval: 0.01, repeats: true, block: { (t) in
        self.myAnnotation.coordinate = CLLocationCoordinate2DMake(mapView.centerCoordinate.latitude, mapView.centerCoordinate.longitude);
        self.myAnnotation.title = "Current location"
        self.mapView.addAnnotation(self.myAnnotation)
    })
}
public func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
    mapRegionTimer?.invalidate()
}

0

কোডটি এখানে প্রবেশ করান আমি এটি সহজ উপায়ে প্রয়োগ করতে সক্ষম হয়েছি, যা মানচিত্রের সাথে সমস্ত মিথস্ক্রিয়া পরিচালনা করে (1/2 / N আঙ্গুল দিয়ে ট্যাপিং / ডাবল / এন ট্যাপিং, 1/2 / এন আঙ্গুল দিয়ে প্যান, চিম্টি এবং ঘূর্ণন)

  1. gesture recognizerমানচিত্রের দৃশ্যের ধারক তৈরি করুন এবং যুক্ত করুন
  2. gesture recognizer's delegateকিছু অবজেক্ট বাস্তবায়ন সেট করুনUIGestureRecognizerDelegate
  3. gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch)পদ্ধতি প্রয়োগ করুন
private func setupGestureRecognizers()
{
    let gestureRecognizer = UITapGestureRecognizer(target: nil, action: nil)
    gestureRecognizer.delegate = self
    self.addGestureRecognizer(gestureRecognizer)
}   

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool
{
    self.delegate?.mapCollectionViewBackgroundTouched(self)
    return false
}

-1

প্রথমে নিশ্চিত হয়ে নিন যে আপনার বর্তমান দৃশ্য নিয়ামক মানচিত্রের প্রতিনিধি a সুতরাং নিজের মানচিত্র MKMapViewDelegateদর্শনের প্রতিনিধিটিকে স্বতে সেট করুন এবং আপনার দৃশ্যের নিয়ামকটিতে যুক্ত করুন। নীচে উদাহরণ।

class Location_Popup_ViewController: UIViewController, MKMapViewDelegate {
   // Your view controller stuff
}

এবং এটি আপনার মানচিত্রের দৃশ্যে যুক্ত করুন

var myMapView: MKMapView = MKMapView()
myMapView.delegate = self

দ্বিতীয়ত , এই ফাংশনটি যুক্ত করুন যা ম্যাপটি সরানো হলে চালিত হয়। এটি কোনও অ্যানিমেশনগুলিকে ফিল্টার করে দেবে এবং সাথে যোগাযোগ করা হলে কেবল আগুন জ্বালাবে।

func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
   if !animated {
       // User must have dragged this, filters out all animations
       // PUT YOUR CODE HERE
   }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.