我在控制器中有一个带有MKMapView
的RubyMotion应用程序,我正在尝试添加图像叠加层。
我在这里添加叠加层(MKMapView
实例的委托设置为控制器本身):
image = UIImage.imageNamed("map").CGImage
lowerLeft = CLLocationCoordinate2DMake(21.652538062803, -127.620375523875420)
upperRight = CLLocationCoordinate2DMake(50.406626367301044, -66.517937876818)
overlay = ImageOverlay.alloc.initWithImageData image, withLowerLeftCoordinate:lowerLeft, withUpperRightCoordinate:upperRight
self.view.addOverlay overlay
这是我的自定义叠加层:
class ImageOverlay
attr_accessor :imageData
attr_accessor :mapRect
def initWithImageData imageData, withLowerLeftCoordinate:lowerLeftCoordinate, withUpperRightCoordinate:upperRightCoordinate
self.imageData = imageData
lowerLeft = MKMapPointForCoordinate(lowerLeftCoordinate)
upperRight = MKMapPointForCoordinate(upperRightCoordinate)
self.mapRect = MKMapRectMake(lowerLeft.x, upperRight.y, upperRight.x - lowerLeft.x, lowerLeft.y - upperRight.y)
return self
end
def coordinate
return MKCoordinateForMapPoint(MKMapPointMake(MKMapRectGetMidX(self.mapRect), MKMapRectGetMidY(self.mapRect)))
end
def boundingMapRect
return self.mapRect
end
end
这是自定义的MKOverlayRenderer:
class ImageOverlayRenderer < MKOverlayRenderer
def drawMapRect mapRect, zoomScale:zoomScale, inContext:context
puts "drawMapRect"
theMapRect = self.overlay.boundingMapRect
theRect = self.rectForMapRect(theMapRect)
CGContextScaleCTM(context, 1.0, -1.0)
CGContextTranslateCTM(context, 0.0, -theRect.size.height)
CGContextDrawImage(context, theRect, self.overlay.imageData)
end
end
在我的视图控制器中,我重写了mapView:rendererForOverlay方法:
def mapView mapView, rendererForOverlay:overlay
if overlay.isKindOfClass(ImageOverlay)
renderer = ImageOverlayRenderer.alloc.initWithOverlay overlay
return renderer
end
return nil
end
问题是drawMapRect
永远不会被调用,应用程序崩溃时没有错误,除非声明可能已生成崩溃报告,其中包含:
Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x0000000000000000
在此之前其他所有内容似乎都在运行,mapView:rendererForOverlay
被调用并且我将返回渲染器。我甚至覆盖canDrawMapRect
并且正在调用它。
有关如何使其发挥作用的任何想法?
答案 0 :(得分:0)
问题与RubyMotion中的错误有关,已经修复并将在下一个版本中提供:
http://hipbyte.myjetbrains.com/youtrack/issue/RM-533
更新:修复程序已在RubyMotion 2.31中发布,我已经验证它可以解决我的问题。