swift - 更改折线颜色 Swift Xcode
问题描述
我正在尝试有条件地更改折线的颜色,但需要检查位于渲染器方法之外的变量。据我所知,我无法将附加变量传递给渲染器方法。建议?
MKPolylineviewDidLoad()
与下面的变量 x 一起初始化是渲染器函数
extension ViewController {
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) ->
MKOverlayRenderer {
if overlay is MKPolyline {
let renderer = MKPolylineRenderer(overlay: overlay)
renderer.strokeColor = UIColor.blue
renderer.lineWidth = 3
return renderer
}
return MKOverlayRenderer(overlay: overlay)
}
如果 x != y,那么我想要 renderer.strokeColor = UIColor.green
解决方案
如果x
和y
是您的视图控制器的属性,您可以像在渲染器方法中的任何变量一样引用它们:
extension ViewController {
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
if overlay is MKPolyline {
let renderer = MKPolylineRenderer(overlay: overlay)
renderer.strokeColor = x == y ? UIColor.blue : UIColor.green
renderer.lineWidth = 3
return renderer
}
return MKOverlayRenderer(overlay: overlay)
}
如果x
并且y
特定于每个叠加层,则需要子类化MKPolyline
:
class MyPolyline: MKPolyline {
// Initialize them specific to your needds
var x = 0
var y = 0
}
extension ViewController {
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
guard let overlay = overlay as? MyPolyline else {
return MKOverlayRenderer(overlay: overlay)
}
let renderer = MKPolylineRenderer(overlay: overlay)
// You can also add a strokeColor as a computed property to the MyPolyline class
renderer.strokeColor = overlay.x == overlay.y ? UIColor.blue : UIColor.green
renderer.lineWidth = 3
return renderer
}
}
推荐阅读
- getstream-io - 使用 Node js 客户端 (GetStream.io) 的空更新频道请求
- gtk - 使用 vala 编程语言,你能检测到其他应用程序何时全屏或最大化,并暂停自己的程序吗?
- css - 为什么这个 CSS 选择器没有返回任何结果?
- mysql - 为什么查询集合名称,在新 pod 启动后变慢
- swift - Streamchat.io:访问用户的团队
- java - 为什么 Apache Tika 将 jar 文件的 mimetype 检测为 application/zip 而不是 application/java-archive?
- typescript - 如何将输入类型对象从 Pact(打字稿)传递到 GraphQL 突变
- tensorflow - 当我将填充设置为 1 时,ZeroPadding2D 填充两次
- php - Laravel 关联其他表
- sql - 在创建主键和非主键的哈希值后比较两个 Hive 表,并列出具有更新、插入和删除的唯一 id