前几天的“震惊”系列重出江湖,乍一看作者的标题,瞬间有一种娱乐新闻的即视感。本以为是个噱头,不过仔细一看还真的蛮有趣,作者在里面提到了如何调出苹果私有的调试工具和对它的一些简单使用。
对这个东西还不了解的可以先去看看,此处祭上作者的原文链接:震惊!iOS 系统居然自带悬浮窗口调试工具。
今天就来一起看看如何使用这个工具做一些实际点的东西,比如隐藏掉百度地图的logo。
都知道各大地图厂商的logo默认是不能够被隐藏的,因为要凸显他的品牌价值,不过不够好看并且又占地方的logo最终还是会引起大伙的群殴,现在业界有一种方式可以变相的将这个logo去掉,那就是在地图的尺寸上做文章,让有logo的那部分恰好在屏幕外面,这样就看不到了。
没错,这是一种解决方式,不过不是很好地解决方式。
通过苹果的私有调试工具,我们可以拿到
View
的层级关系,并且进一步找到那个logo,然后把它隐藏掉。操作步骤如下:
一: Appdelegate.m
文件中,添加如下代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
#ifdef DEBUG
id debugClass = NSClassFromString(@"UIDebuggingInformationOverlay");
[debugClass performSelector:NSSelectorFromString(@"prepareDebuggingOverlay")];
#endif
}
二:双指(注意是两个手指,不是一个手指点两下)轻触statusBar
(也就是显示系统时间的那个地方)调出调试窗口,它长这个样子:

三:在地图页面,查看ViewHierarchy
(View
的层次结构)

(注意:同一层级的左对齐,子视图在父视图的右侧)
四:从这个地图层级中,可以看到我们熟悉的BMKMapView
上面有一个MapView
,这个MapView
上面有着很多其他的东西,通过对应View
后的那个!
,可以进到它的具体页中,如下所示:

这个Opacity
是一个很好用的属性,你可以通过它来找到这个类跟页面上的哪个视图是一一对应的。
以下两个类是百度地图没有开放给我们的。
-
BaiduMapEAGLView
:就是我们看到的地图层,也是最复杂的一层。 -
TapDetectingView
:我们的标注视图就是添加在这一层的。
通过逐个的改变透明度,最终我们发现了一个跟BaiduMapEAGLView
在同一层级的UIImageView
,改变这个UIImageView
的透明度时,logo消失了,如下所示
好了,知道了这层关系,现在我们就可以通过代码一级一级的遍历查询找到那个ImageView
了。还是用上一篇文章给你的地图模块动手术中的demo。
代码如下:
隐藏百度地图的logo
*/
- (void)hideBaiduMapLogo{
/*隐藏图标*/
id mapViewClass = NSClassFromString(@"MapView");
for (UIView *subView in _mapView.subviews) {
if ([subView isKindOfClass:[mapViewClass class]]) {
for (UIView *subclassView in subView.subviews) {
if ([subclassView isKindOfClass:[UIImageView class]]) {
if (subclassView.tag == 0) {
subclassView.hidden = YES;
}
}
}
}
}
}
注意:这里通过tag来区分是系统的imageView,还是自定义的imageView,避免误伤。
demo中提出了一种轻量级的地图设计方案,对各模块的功能做了很好的分离,现在里面又加上了一些新的功能,除了上面所说的隐藏logo外,还有绘制高亮多边形,响应多边形事件的功能,篇幅有限,感兴趣的可以自行下载。
网友评论