سؤال

أنا مرتبك.لدي MKMapView، وفي طريقة viewDidLoad أفعل:

- (void)viewDidLoad {
    mainDelegate = (PublicArtOmahaAppDelegate*)[[UIApplication sharedApplication]delegate]; 

    XMLController  *myXMLController = [[XMLController alloc] init]; 
    [myXMLController parse];
    mapView.showsUserLocation = YES;
    [self gotoLocation];

    // add annotations to map
    [self.mapView addAnnotations:mainDelegate.mapAnnotations];
    [myXMLController release];
}

[gotoLocation الذاتي] يدعو:

- (void)gotoLocation
{
    MKCoordinateRegion newRegion;

    CLLocation *userLocation = mapView.userLocation.location;
    float latitude = userLocation.coordinate.latitude;
    float longitude = userLocation.coordinate.latitude;
    newRegion.center.latitude = latitude;
    newRegion.center.longitude = longitude;

    [self.mapView setRegion:newRegion animated:YES];
}

لذلك اعتقدت أن هذا يجب أن يركز الخريطة على موقع المستخدم عند تحميل MapView وكنت أخطط أيضًا لتنفيذ زر على الشاشة من شأنه أن يستدعي gotoLocation يدويًا مرة أخرى لتحديث موقع المستخدم عندما يريد.

لكن...عندما أقوم بتشغيل التطبيق على أحد الأجهزة، فإنه يقوم بتحميل الخريطة المتمركزة في رقعة من المحيط غرب إفريقيا والتي يبدو أنها طويلة وخط العرض 0,0.ما اعتقدته غريبًا هو أنه عندما عدت إلى موقعي الحقيقي، تم وضع موقعي بشكل صحيح كتعليق توضيحي.لذا أعتقد أن هناك خطأ ما في كيفية تعيين موقع المستخدم في gotoLocation؟هل يلاحظ أحد ما أفعله خطأ؟

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

المحلول

من MKUserLocation توثيق:

موقع

الموقع الحالي للجهاز.(يقرأ فقط)

@property (readonly, nonatomic) CLLocation *location

مناقشة

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

يستغرق الأمر بضع ثوانٍ حتى يتمكن MKMapView (أو CLLocationManager) من إصلاح موقع المستخدم، وقد يستغرق الأمر بضع محاولات للحصول على إصلاح دقيق نسبيًا.أفضل رهان لك هو على الأرجح إنشاء ملف CLLocationManager كائن، وقم بتعيين مفوض له، ثم قم بتكبير الخريطة عند locationManager:didUpdateToLocation:fromLocation: حرائق الطريقة.

نصائح أخرى

يجب عليك تعيين span للمنطقة أيضا.اضبطه على بعض القيمة التعسفية، مثل latitudeDelta = 0.01 (و نفس الشيء ل latitudeDelta).

اتصل ايضا gotoLocation من الداخل – locationManager:didUpdateToLocation:fromLocation: (إذا كنت تستخدم مدير الموقع).بهذه الطريقة لن تتصل به إلا عندما يكون لديك موقع مستخدم صالح.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top