Ich erstellte die Apple Map-Anwendung und behandelt Location Mapping mit MKCircle und MKPolyline.Drehen AnnotationView in bestimmten Koordinaten mit Swift
Und ich verwenden
func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView?
{}
obige Verfahren für Custom Annotations-Update in der Kartenansicht.
Die Sache ist, kann ich das Bild drehen, während die Anmerkung einen bestimmten Zeitpunkt erreicht.
Meine Anforderung, die Annotation um drei Standorte zu verschieben, begann von Los Angeles und New York schließlich Mexico City, also während die Annotation, die New York erreicht, möchte ich das Anmerkungsbild drehen. Ist es möglich, bitte schlage mir eine Notiz vor.
Für weitere Informationen finden Sie den folgenden Coding-Teil.
//
// ViewController.swift
// RouteMap
//
// Created by Suthan M.
// Copyright © 2016 suthan.nimalan.m All rights reserved.
//
import UIKit
import MapKit
extension Double {
/** Converts the specified value in degrees into radians. */
func degrees() -> CGFloat {
return CGFloat(self) * CGFloat(M_PI/180.0)
}
}
class ViewController: UIViewController,MKMapViewDelegate {
@IBOutlet var mkMapView: MKMapView!
var flightpathPolyline: MKGeodesicPolyline!
var planeAnnotation: MKPointAnnotation!
var planeAnnotationPosition = 0
var planeDirection: CLLocationDirection!
var testValue: MKMapPoint!
var testCount: Int!
var radiusInSomething : CLLocationDistance = 10000000.0
var circle:MKCircle!
override func viewDidAppear(animated: Bool) {
let location = CLLocationCoordinate2D(
latitude: 33.9424955,
longitude: -118.4080684
)
self.mkMapView.setRegion(MKCoordinateRegion(center: location, span: MKCoordinateSpan(latitudeDelta: 95, longitudeDelta: 95)), animated: true)
let LAX = CLLocation(latitude: 33.9424955, longitude: -118.4080684)
let JFK = CLLocation(latitude: 40.6397511, longitude: -73.7789256)
let WAS = CLLocation(latitude: 19.432608, longitude: -99.133209)
let mexicoCityLoc = CLLocationCoordinate2D(latitude: 19.4284700, longitude: -99.1276600)
mkMapView.addOverlay(MKCircle(centerCoordinate: mexicoCityLoc,
radius: radiusInSomething * MKMetersPerMapPointAtLatitude(mexicoCityLoc.latitude)))
var coordinates = [LAX.coordinate, JFK.coordinate, WAS.coordinate]
flightpathPolyline = MKGeodesicPolyline(coordinates: &coordinates, count: 3)
mkMapView.addOverlay(flightpathPolyline)
let coordin = CLLocationCoordinate2D(latitude: 19.4284700, longitude: -99.1276600)
circle = MKCircle(centerCoordinate: coordin, radius: 2000)
mkMapView.addOverlay(circle)
let annotation = MKPointAnnotation()
annotation.title = NSLocalizedString("Plane", comment: "Plane marker")
mkMapView.addAnnotation(annotation)
self.planeAnnotation = annotation
self.updatePlanePosition()
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
// Work with MKMapview
self.planeDirection = 360.0
testCount = 0
mkMapView.delegate = self
mkMapView.mapType = MKMapType.Standard
mkMapView.showsUserLocation = true
}
func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer {
if overlay is MKPolyline {
let renderer = MKPolylineRenderer(overlay: overlay)
renderer.lineWidth = 3.0
renderer.alpha = 0.5
renderer.strokeColor = UIColor.blueColor()
return renderer
}else if overlay is MKCircle {
let circleRenderer = MKCircleRenderer(overlay: overlay)
circleRenderer.fillColor = UIColor.blueColor().colorWithAlphaComponent(0.1)
circleRenderer.strokeColor = UIColor.blueColor()
circleRenderer.lineWidth = 1
return circleRenderer
}
return MKOverlayRenderer()
}
func updatePlanePosition() {
let step = 5
guard planeAnnotationPosition + step < flightpathPolyline.pointCount
else { return }
let points = flightpathPolyline.points()
self.planeAnnotationPosition += step
let nextMapPoint = points[planeAnnotationPosition]
self.planeAnnotation.coordinate = MKCoordinateForMapPoint(nextMapPoint)
let previousMapPoint = points[planeAnnotationPosition]
planeAnnotationPosition += step
self.planeDirection = directionBetweenPoints(previousMapPoint, nextMapPoint)
// set turn point of plane
if(testValue.x == 79197107.0566392){
testCount = 1
planeDirection = 360.0
self .mapView(mkMapView, viewForAnnotation: planeAnnotation)
}
performSelector("updatePlanePosition", withObject: nil, afterDelay: 0.03)
}
private func directionBetweenPoints(sourcePoint: MKMapPoint, _ destinationPoint: MKMapPoint) -> CLLocationDirection {
//print(sourcePoint)
//MKMapPoint(x: 74074213.8054451, y: 105154930.159039)
//MKMapPoint(x: 74074213.8054451, y: 105154930.159039)
testValue = sourcePoint
let x = destinationPoint.x - sourcePoint.x
let y = destinationPoint.y - sourcePoint.y
return radiansToDegrees(atan2(y, x)) % 360 + 90
}
private func radiansToDegrees(radians: Double) -> Double {
return radians * 180/M_PI
}
private func degreesToRadians(degrees: Double) -> Double {
return degrees * M_PI/180
}
func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? {
let planeIdentifier = "Plane"
let annotationView = mapView.dequeueReusableAnnotationViewWithIdentifier(planeIdentifier)
?? MKAnnotationView(annotation: annotation, reuseIdentifier: planeIdentifier)
annotationView.image = UIImage(named: "pointer")
if(testCount == 1){
let angle = CGFloat(self.degreesToRadians(self.planeDirection))
annotationView.transform = CGAffineTransformRotate(mapView.transform, angle)
}
else{
let angle = CGFloat(degreesToRadians(planeDirection))
annotationView.transform = CGAffineTransformRotate(mapView.transform, angle)
}
return annotationView
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
Dank.
Wie Sie den Code Fluss bereits vorgeschlagen, für Drehen von Bildern, das ist gut funktioniert in meinem Code Flow getan, aber meine Szenarien Ich möchte das Bild drehen, während die Koordinaten „New York“ erreichen, kann ich die Punkte finden der Ort beim Erreichen der Anmerkung in dem bestimmten Punkt und versuchen, zu drehen, aber das Bild nicht aktualisiert. Mehr Informationen finden Sie in der folgenden Methode - func mapView (mapView: MKMapView, viewForAnnotation Annotation: MKAnnotation) -> MKAnnotationView? {} –