如何在Google地图上放置iOS放大镜效果(GMSMapKit)

时间:2015-06-30 15:20:26

标签: ios swift google-maps mapkit

如何将UITextView短信编辑放大镜放在Google地图上GMSMapView

例如,我有GMSMapView来显示我当前的位置 我想在调用委托方法时触发叠加放大镜视图 mapView:didChangeCameraPosition:

中的mapView:willMove:GMSMapViewDelegate

目的是根据用户点击坐标提供叠加缩放子视图(如ImageView上的github.com/acoomans/iOS-MagnifyingGlass

如果Google Maps for iOS或iOS MapKit可以支持此类自定义,请告知我们

更新#2:mapView.addSubView(mapSubView)现在正常工作。但它污染了主GMSMapView

更新#1:我尝试mapView.addSubView它似乎对GMSMapView不起作用,尽管从UIView继承

以下代码段的目的是在地图上检索用户的触摸点并将其转换为CGPoint以创建第二个GMSMapView

func mapView(mapView: GMSMapView!, didTapAtCoordinate coordinate: CLLocationCoordinate2D) {
    println("Tapping at (\(coordinate.latitude), \(coordinate.longitude))")

    // 1. retrieve the user touch position as CLLocationCoordinate2D
    let cameraPosition = GMSCameraPosition.cameraWithLatitude(coordinate.latitude, longitude: coordinate.longitude, zoom: 20) 

    // 2. convert it into CGPoint
    let screenTouchPoints = mapView.projection.pointForCoordinate(coordinate)

    // 3. set the CGRect for init the mapSubView
    let frame = CGRectMake(screenTouchPoints.x, screenTouchPoints.y, 100, 100)
    mapSubView = GMSMapView.mapWithFrame(frame, camera: cameraPosition)

    // 4. Finally add to the main Map View
    mapView.addSubview(mapSubView)
}

2 个答案:

答案 0 :(得分:0)

GMSMapView似乎有道理。也许在原始顶部(高角半径以创建圆?)上有第二个GMSMapView,并在第二个地图内为缩放级别设置alpha和缩放。每当调用mapView:didChangeCameraPosition等时都这样做。

答案 1 :(得分:0)

通过引用此Github Project,还可以通过以这种方式放置视图层次结构来放大GMSMapView:

查看控制器>放大视图>视图想要缩放

核心渲染机制是 - (void)drawRect:(CGRect)rect { CGContextRef context = UIGraphicsGetCurrentContext(); CGContextTranslateCTM(context, self.frame.size.width/2, self.frame.size.height/2 ); CGContextScaleCTM(context, scale, scale); CGContextTranslateCTM(context, -touchPoint.x, -touchPoint.y + (self.scaleAtTouchPoint? 0 : self.bounds.size.height/2)); [self.viewToMagnify.layer renderInContext:context]; }

loupe = ACLoupe() magnifyingGlass = ACMagnifyingGlass() magnifyingView = ACMagnifyingView(frame: self.view.frame) magnifyingView.magnifyingGlass = loupe

magnifyingView.addSubview(Your_Subview_here)

通过这种方法,放大视图可以捕获当前帧上下文,因为放大视图是其他视图的容器,因此捕获可以显示当前UI情况并缩放1.5倍(默认比例因子)