私のコードは正常に動作し、エミュレーターで希望どおりに動作します。しかし、実際のデバイスに置いてその場所に行くと、locationManager(..., didEnterRegion region: CLRegion)
呼び出されません。didExitRegion
シミュレーターでその場所に出入りすると、との両方didEnterRegion
が呼び出されますが、実際のデバイスでは呼び出されないため、コードのバグではないと思います。私は、Swift 2.0 Xcode 7 ベータ 5の iPhone 5S でテストしており、広いオープン エリアで良好なセル カバレッジを実現しています。また、さまざまな半径を試しました。私の簡略化されたコードは次のとおりです。
import UIKit
import CoreLocation
import MapKit
class GeoLapViewController: UIViewController, CLLocationManagerDelegate, MKMapViewDelegate{
var manager: CLLocationManager?
var location: CLLocationCoordinate2D!
@IBOutlet weak var mapView: MKMapView!
override func viewDidLoad() {
super.viewDidLoad()
manager = CLLocationManager()
manager?.delegate = self;
manager?.desiredAccuracy = kCLLocationAccuracyBest
self.mapView.delegate = self
mapView.mapType = MKMapType.Satellite
manager?.startUpdatingLocation()
let currRegion = CLCircularRegion(center: CLLocationCoordinate2D(latitude: location.latitude, longitude: location.longitude), radius: 20, identifier: "Laplocation")
manager?.startMonitoringForRegion(currRegion)
let newAnotation = MKPointAnnotation()
newAnotation.coordinate = location
newAnotation.title = "Start/Finish location"
mapView.addAnnotation(newAnotation)
let circle = MKCircle(centerCoordinate: location, radius: 150 as CLLocationDistance)
self.mapView.addOverlay(circle)
print(location.latitude)
print(location.longitude)
print(location)
}
func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! {
if overlay is MKCircle {
let circle = MKCircleRenderer(overlay: overlay)
circle.strokeColor = UIColor.blueColor()
circle.fillColor = UIColor(red: 0, green: 0, blue: 255, alpha: 0.4)
circle.lineWidth = 1
return circle
} else {
return nil
}
}
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
manager.stopUpdatingLocation()
let location = locations[0]
let geoCoder = CLGeocoder()
geoCoder.reverseGeocodeLocation(location, completionHandler: { (data, error) -> Void in
self.mapView.centerCoordinate = location.coordinate
let reg = MKCoordinateRegionMakeWithDistance(location.coordinate, 100, 100)
self.mapView.setRegion(reg, animated: true)
self.mapView.showsUserLocation = true
})
}
func locationManager(manager: CLLocationManager, didEnterRegion region: CLRegion) {
print("Entering region")
}
func locationManager(manager: CLLocationManager, didExitRegion region: CLRegion) {
print("Exit region")
}
func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
print("\(error)")
}
}
このような問題を抱えている人や、Xcode 7 で構文が変更された人はいますか?