代码之家  ›  专栏  ›  技术社区  ›  iji

如何在swift中使用MapKit旋转自定义用户LocationAnnotationView图像?

  •  3
  • iji  · 技术社区  · 8 年前

    我正在尝试使用MapKit在地图上显示用户的方向。 本地MapKit方法始终旋转整个地图。 因为用户位置也是一个MKAnnotationView,所以我决定创建一个特定的类来覆盖它,并使用一个特定图像(带箭头)。

    class UserLocationAnnotationView: MKAnnotationView {
    
    override init(frame: CGRect) {
        super.init(frame: frame)
    }
    
    override init(annotation: MKAnnotation!, reuseIdentifier: String!) {
    
        super.init(annotation: annotation, reuseIdentifier: reuseIdentifier)
    
        var frame = self.frame
        frame.size = CGSizeMake(130, 130)
        self.frame = frame
        self.backgroundColor = UIColor.clearColor()
        self.centerOffset = CGPointMake(-30, -50)
    
    }
    
    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)!
    }
    
    /*
    // Only override drawRect: if you perform custom drawing.
    // An empty implementation adversely affects performance during animation.
    */
    override func drawRect(rect: CGRect) {
        // Drawing code
        UIImage(named: "userLocation.png")?.drawInRect(CGRectMake(65, 65, 65, 65))
    
    
    }
    

    现在,我正试图在locationManager的didUpdateHeading函数中找到旋转MKAnnotationView图像的方法。

    class ViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate { 
    
    var userLocationView :MKAnnotationView?
    
    func locationManager(manager: CLLocationManager, didUpdateHeading newHeading: CLHeading) {
        print(newHeading.magneticHeading)
    }
    

    打印newHeading。magneticHeading可以工作,而且非常准确。 现在,如何旋转自定义UserLocationAnnotationView?

    谢谢你的帮助。

    1 回复  |  直到 8 年前
        1
  •  6
  •   Arthur    8 年前

    首先,我认为您不一定要子类化 MKAnnotationView 。您可以简单地将 UIImage 到其 image

    现在,我假设您已经成功地将注释添加到地图并对其进行了引用。

    要旋转航向指示器,我可以看到三个选项:

    1. 旋转 MK注释视图 形象 所有物 :
      • 方法:当标题更改时,创建 UI图像 并将其分配给 形象 所有物 Example (未测试)。
    2. 旋转 MK注释视图 :
      • 方法:当标题更改时,使用 MK注释视图 的/ UIView transform 所有物分配适当的 CGAffineTransform 到它。
      • 专业:最简单
      • Con:还旋转详图/详图索引视图。如果你需要这些,这将不是你的选择。
    3. UI图像 变成一个 UIImageView add that one as a subview MK注释视图 :
      • 方法:与2类似,但使用 使改变 上的属性 直接不在 MK注释视图 它本身这样,详图索引视图就不会旋转。
      • 赞成:应该很有效。
      • 反对者:多一点工作。

    您还需要:

    • 如果要设置旋转动画(1除外),请将更改包装到 使改变 中的属性 UI视图 静止的 animate 方法