如何将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)
}
答案 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倍(默认比例因子)