2014-10-15 14 views
6

Tôi đang cố gắng tìm hiểu cách che phủ hình ảnh trên bản đồ IOS bằng SWIFT. Tôi đã tạo đoạn mã sau phủ lên vòng tròn màu xanh lá cây trên bản đồ bằng cách sử dụng bộ bản đồ. Tôi muốn thay thế vòng tròn màu xanh lá cây bằng hình chữ nhật tOver.png 500,500 Tôi mới phát triển iOS và nhanh chóng. Cho đến nay tôi không thể tìm thấy một ví dụ nhanh hoặc tài nguyên tốt.Cách che phủ hình ảnh trên bản đồ IOS bằng cách sử dụng nhanh

// 
// ViewController.swift 
// mapoverlaytest 
// 

import UIKit 
import MapKit 


class ViewController: UIViewController,MKMapViewDelegate { 
    @IBOutlet weak var mapView: MKMapView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.mapView.delegate = self; 
     let location = CLLocationCoordinate2D(
      latitude: 51.50007773, 
      longitude: -0.1246402 
     ) 

     let span = MKCoordinateSpanMake(0.05, 0.05) 
     let region = MKCoordinateRegion(center: location, span: span) 

     mapView.setRegion(region, animated: true) 

     let annotation = MKPointAnnotation() 
     annotation.setCoordinate(location) 
     annotation.title = "Big Ben" 
     annotation.subtitle = "London" 



     var overlay = MKCircle (centerCoordinate: location, radius: 500) 

     mapView.addOverlay(overlay) 

     mapView.addAnnotation(annotation) 

    } 

    func mapView(
     mapView: MKMapView!, rendererForOverlay 
     overlay: MKOverlay!) -> MKOverlayRenderer! { 
      if (overlay.isKindOfClass(MKCircle)) 
      { 
       var circleRenderer = MKCircleRenderer(overlay: overlay) 
       circleRenderer.strokeColor = UIColor.greenColor() 
       circleRenderer.fillColor = UIColor(
        red: 0, 
        green: 1.0, 
        blue: 0, 
        alpha: 0.5) 

       return circleRenderer 
      } 
      return nil 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

} 

Trả lời

0

Thay vì rendererForOverlay, bạn nên thực hiện

func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! 

Bên trong đó, xây dựng MKAnnotationView của bạn và thiết lập thuộc tính hình ảnh của mình trước khi trở về nó ra. Hãy xem https://developer.apple.com/LIBRARY/ios/documentation/MapKit/Reference/MKAnnotationView_Class/index.html để biết thêm thông tin về lớp MKAnnotationView.

3

Như Totem đã giải thích, sẽ đơn giản hơn khi sử dụng chú thích hình ảnh thay vì lớp phủ nếu nó hoạt động cho mục đích của bạn. Nó có thể không hoạt động tùy thuộc vào những gì bạn muốn sử dụng hình ảnh này cho, tuy nhiên. Sự khác biệt chính giữa lớp phủ bản đồ và chú thích bản đồ là chú thích ở cùng kích thước khi bạn phóng to bản đồ (như ghim) và lớp phủ thay đổi theo kích thước của bản đồ (như đánh dấu tòa nhà). Nếu bạn muốn hình ảnh của bạn phóng to với bản đồ, nó sẽ phức tạp hơn một chút.

Bạn sẽ muốn tạo một lớp con MKOverlayRenderer mới để vẽ hình ảnh của bạn. Bạn phải tự vẽ hình ảnh vào bối cảnh hình ảnh bằng cách phân lớp chức năng drawMapRect (mapRect, zoomScale, inContext). Sau khi bạn tạo lớp con này, bạn chỉ có thể thay thế trong lớp con tùy chỉnh của bạn thay cho MKCircleRenderer, và bạn nên làm tốt.

Có ghi chú rất tốt trên Raywenderlich.com, bạn nên kiểm tra chắc chắn. Nó sẽ hướng dẫn bạn qua mọi thứ bạn cần biết.

Các vấn đề liên quan