我想在我的Swift应用程序中绘制折线。
SWIFT代码
class MapViewController: UIViewController, MKMapViewDelegate {
@IBOutlet var theMapView: MKMapView
override func viewDidLoad() {
super.viewDidLoad()
setMapView()
}
func setMapView() {
//theMapView.zoomEnabled = false
//theMapView.scrollEnabled = false
theMapView.rotateEnabled = false
//
var lat: CLLocationDegrees = 37.586601
var lng: CLLocationDegrees = 127.009381
//
var latDelta: CLLocationDegrees = 0.008
var lngDelta: CLLocationDegrees = 0.008
var theSpan: MKCoordinateSpan = MKCoordinateSpanMake(latDelta, lngDelta)
var initLocation: CLLocationCoordinate2D = CLLocationCoordinate2DMake(lat, lng)
var theRegion: MKCoordinateRegion = MKCoordinateRegionMake(initLocation, theSpan)
self.theMapView.setRegion(theRegion, animated: true)
var locations = [CLLocation(latitude: 37.582691, longitude: 127.011186), CLLocation(latitude: 37.586112,longitude: 127.011047), CLLocation(latitude: 37.588212, longitude: 127.010438)]
var coordinates = locations.map({(location: CLLocation) -> CLLocationCoordinate2D in return location.coordinate})
var polyline = MKPolyline(coordinates: &coordinates, count: locations.count)
var myPolylineView : MKPolylineView
/* error */
myPolylineView.polyline = polyline // #1
myPolylineView.strokeColor = UIColor.blueColor() // #2
myPolylineView.lineWidth = 5; // #3
self.theMapView.addOverlay(myPolylineView) // #4
/* ----- */
}
}
错误:
// #1 <br>
Cannot assign to 'polyline' in 'myPolylineView' <br>
// #2 <br>
'strokeColor' is unvailable: APIs deprecated as iOS 7 and earlier are unavailable in Swift <br>
// #3 <br>
'lineWidth' is unvailable: APIs deprecated as iOS 7 and earlier are unavailable in Swift <br>
// #4 <br>
Missing argument for parameter 'level' in call <br>
我找不到解决方案。
首先 ,MKPolylineView
必须创建一个MKPolylineRenderer
。
MKPolylineView
自iOS 7起已弃用,尽管您仍可以在Objective-C中使用它,但在Swift中不支持它。
其次
,您必须MKPolylineRenderer
在rendererForOverlay
委托方法中创建并返回一个(不要将其传递给addOverlay
)。
在addOverlay
方法中,传递MKPolyline
对象(而不是MKPolylineView
or MKPolylineRenderer
)。
以解释传递给addOverlay
哪个对象与返回的对象之间的区别rendererForOverlay
。)
因此,在该setMapView
方法中,删除创建和设置的行,myPolylineView
并将其更改addOverlay
为:
self.theMapView.addOverlay(polyline)
然后实现该rendererForOverlay
方法:
func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! {
if overlay is MKPolyline {
var polylineRenderer = MKPolylineRenderer(overlay: overlay)
polylineRenderer.strokeColor = UIColor.blueColor()
polylineRenderer.lineWidth = 5
return polylineRenderer
}
return nil
}
确保设置了地图视图,delegate
否则将不会调用委托方法,并且不会显示叠加层。如果theMapView
是IBOutlet,则连接delegate
插座或将其设置为代码(例如,viewDidLoad
在调用super之后输入):
self.theMapView.delegate = self
问题内容: 有没有人设法使此功能在Swift中工作? 苹果文档:https : //developer.apple.com/library/prerelease/mac/documentation/Carbon/Reference/QuartzEventServicesRef/index.html#//apple_ref/c/func/CGEventTapCreate 以下是CGEventTapC
问题内容: 在Objective-C中,我们使用以下代码为视图设置RGB颜色代码: 如何在Swift中使用它? 问题答案: 这是该函数的Swift版本(用于获取值的UIColor表示形式):
问题内容: 有人能帮我吗?我找不到完整的语法示例。 问题答案: 不清楚您要问 的 是什么 ,但我注意到您在代码中有几个错误: 您应该创建使用 返回,因此无需将其包装在内部(也称为实例化新对象)。 完成处理程序是一个闭包,下面是创建该特定闭包的方法: } 这是更新的代码:
问题内容: 我正在尝试将此代码段转换为Swift。由于某些困难,我正在努力下车。 我遇到的第一个也是主要的问题是如何定义和使用C结构。我认为,在上述代码的第一行()中,我认为他们正在定义从struct sockaddr_in(?)调用的实例。我试图声明这样的。 但是我 在调用中 得到了 参数’sin_len’ 的错误 Missing参数 错误 , 这是可以理解的,因为该结构需要多个参数。所以我再次
问题内容: 如何在Swift中使用UserDefaults保存/检索字符串,布尔值和其他数据? 问题答案: 参考:NSUserdefault objectTypes 商店 取回 去掉 删除所有键 Swift 2及以下 商店 取回 去掉 寄存器 registerDefaults:将registrationDictionary添加到每个搜索列表的最后一项。这意味着在NSUserDefaults在所有其
问题内容: 我阅读了Xcode 6的新增功能。本文介绍了有关Xcode 6的一些新功能,并说: 命令行 Xcode的调试器包括Swift语言的交互式版本,称为REPL(Read-Eval-Print- Loop)。使用Swift语法来评估正在运行的应用程序并与之交互,或者在类似脚本的环境中编写新代码。REPL可从Xcode控制台的LLDB或Terminal中获得。 我想知道如何获得REPL? 问题