Наложение частично скрыто с помощью MapKit в Swift

В настоящее время я создаю приложение для iPad в помещении, благодаря IndoorAtlas SDK.

Сначала я попытался построить всю карту самостоятельно, но у меня были довольно большие проблемы с точностью, которые, казалось, решались при отображении в виде наложения на карты, предоставленные Apple (MapKit).

Но теперь у меня есть проблема с моим пользовательским оверлеем изображения floorPlan, который, по-видимому, частично скрыт Apple Map. У меня уже есть скрытые метки, трафик, достопримечательности, здания, и моя карта настроена для отображения в стандартном режиме.

Скрытая часть моего наложения зависит от высоты камеры, что заставляет меня верить, что плитки ответственны.

Изображение floorPlan добавляется на карту с помощью этой функции:

func indoorLocationManager(manager: IALocationManager, didEnterRegion region: IARegion) {
    print("Floor plan changed to \(region.identifier)")
    ressourceManager.fetchFloorPlanWithId(region.identifier, andCompletion: {
        (floorPlan:IAFloorPlan?, error:NSError?) -> () in
        if error == nil {
            self.floorPlan = floorPlan
            self.fpImage = UIImage(imageLiteral: "Map")
            if self.mapOverlay != nil {
                map.removeOverlay(self.mapOverlay)
            }
            self.mapOverlay = MapOverlay(floorPlan: self.floorPlan!)
            map.addOverlay(self.mapOverlay, level: .AboveRoads)
        } else {
            print("Error fetching floorplan")
        }
    })
}

Местоположение обновляется следующим образом:

func indoorLocationManager(manager: IALocationManager, didUpdateLocations locations: [AnyObject]) {
    let loc: CLLocation = (locations.last as! IALocation).location!
    print("Long. \(loc.coordinate.longitude) lat. \(loc.coordinate.latitude)")

    if circle != nil {
        map.removeOverlay(circle)
    }

    circle = MKCircle(centerCoordinate: loc.coordinate, radius:3)
    map.addOverlay(circle)

    camera = nil
    camera = MKMapCamera(lookingAtCenterCoordinate: loc.coordinate, fromEyeCoordinate: loc.coordinate, eyeAltitude: 300)
    camera.heading = loc.course
    map.setCamera(camera, animated: true)
}

И мой Overlay View выглядит так:

class MapOverlayView : MKOverlayRenderer {

    let floorPlan: IAFloorPlan!
    let image: UIImage!

    init(overlay: MKOverlay, overlayImage: UIImage, floorPlan: IAFloorPlan) {
        self.image = overlayImage
        self.floorPlan = floorPlan
        super.init(overlay: overlay)
    }

    override func drawMapRect(mapRect: MKMapRect, zoomScale: MKZoomScale, inContext ctx: CGContextRef) {
        let theMapRect: MKMapRect = self.overlay.boundingMapRect
        let theRect: CGRect = self.rectForMapRect(theMapRect)
        // Rotate around top left corner
        CGContextRotateCTM(ctx, degreesToRadians(self.floorPlan.bearing))
        UIGraphicsPushContext(ctx)
        image.drawInRect(theRect, blendMode: .Normal, alpha: 1.0)
        UIGraphicsPopContext()
    }

    func degreesToRadians(x: Double) -> CGFloat {
        return CGFloat(M_PI * x / 180.0)
    }

}

Карта Apple добавляется при инициализации, а наложение добавляется позже, но я действительно не вижу причин, по которым это может быть проблемой..

Одним из решений может быть просто полностью скрыть Apple Map, но мне не удастся сделать это, не скрывая наложений.

Может ли проблема возникнуть из-за загрузки карты? или это графическая проблема?

Вот экран iPad

0 ответов

Другие вопросы по тегам