越狱开发小结

在开发iphone插件的时候发现一个奇怪的问题,如果UIAlertView在hook springboard显示的时候,
会根据现在打开的app的方向来显示方向和缩放,而不是根据springboard的方向(大概是因为springboard
的方向是不会变的)。因此,要在打开一个app的时候,在springboard中显示一个UIAlertView,就需要考
虑横屏问题(尤其是在这个UIAlertView还自己添加了界面元素的情况下),这真是个令人烦恼的问题。

 分析了一下,

插件是hook的springboard的原因,
顶层的窗口是在springboard上的,随着一个app的打开顶层的窗口可能会做相应的改变,导致弹出框的方向改变。如
果换一种方法添加一个UIWindow也可以实现显示一个视图。

 以显示一个HUD为例,只需要在hook的时候,声明一个静态的UIWindow,并设置你需要的这个window的层次属性,
在这个UIWindow上添加HUD就可以实现HUD的显示。不过默认情况下这个UIWindow是隐藏的,如果要显示,需要先
设置UIWindow的显示属性。在这个window显示的时候,springboard的界面被这个window接管,所以下层的各种app
的是打不开的,所以在显示结束以后,需要再把这个window的显示属性设置为关闭状态。

 通过这种方法可以实现一个顶层的窗口来做插件功能中的界面展示。

得出两个解决办法:
1、在显示前关闭已经打开的app,回到springboard。
2、得到当前状态下的设备方向,再自己调整。

第一个实现起来,估计跟做一个sbsetting的freeup差不多。第二个实现起来,似乎也不好办,UIDevice得到
的一直是unknow,而通过UIApplication得到的又是springboard的那个永恒不变的1。好像都陷入死胡同了。
唉,搜索资料继续研究。

研究了一下第一种实现调用

[(SpringBoard *)[UIApplication sharedApplication] _killThermallyActiveApplication];

关闭当前的app.似乎有个执行时间问题。






你可能感兴趣的:(越狱开发小结)