UI进价iOS开发指南iOS

通过手势欺骗实现Navigation全屏手势返回

2015-07-19  本文已影响791人  WELCommand

这事其实挺无聊的。

过程也很是枯燥,只能作为单身狗的消遣。

我们知道,Navigation默认是有需要把手指放在屏幕边缘,才能够使返回动画生效。

从技术角度来讲,这是怎么实现的呢?

首先,只要愿意挖,你最终会找到UIScreenEdgePanGestureRecognizer这么个手势。并确定是这个手势来实现上述效果。

然后,你会分析这个手势。

在这,假设存在一段代码是“开始返回”,另一段代码是“返回中”。

通过直觉,UITouch是一种触发条件。(当然,直觉是马后炮,我猜到最后才猜对)

打印出UIScreenEdgePanGestureRecognizer所有的方法。你可能会注意到这两个方法 touchesBegan:withEvent:
touchesMoved:withEvent:

然后,通过method_exchangeImplementations,把这两个方法截取下,并且用touch的私有api “_locationInWindow ” 将一组touch参数平移到屏幕边缘。

成功。

另外,在navbar隐藏的情况下,返回动画会失效。怎么让他不失效呢?

UIScreenEdgePanGestureRecognizer的delegate是_UINavigationInteractiveTransition。

通过method_exchangeImplementations 可以发现,在隐藏bar的情况下 这个方法gestureRecognizer:shouldReceiveTouch: 会返回NO 。

使用method_exchangeImplementations ,让其永久返回YES。

game over  ,通关时间 5小时。代码在这代码 

最后,从产品的角度,我认为苹果的实现远远高于全屏返回。

上一篇 下一篇

猜你喜欢

热点阅读