美文网首页
摇一摇:截屏、反馈(持续改进中...)

摇一摇:截屏、反馈(持续改进中...)

作者: 汝阴龙 | 来源:发表于2017-11-25 10:28 被阅读418次

    一、背景:(知乎、BugTags)

    1、知乎iOS APP上有个功能,摇一摇反馈。觉得挺好用,自己想实现一个开源的。

    (PS:其实知乎用的也是第三方的:Powered by instuBug)

    知乎,摇一摇截图-1 知乎,摇一摇截图-2 知乎,摇一摇截图-3

    2、网上有个第三方的:BugTags,不过BugTags是一整套:【客户端+服务器端】,使用他们的这个东西,数据是要上传到他们的服务器的。

    另外BugTags还有一些缺陷。那就是该反馈功能——如果你是使用的他们的免费版的,功能会有时抽筋——其效果和你在本地代码中设置的不一样——向他们公司的客服询问过,因为其中的几个功能可以在服务器端配置,所以该系统每次随App使用时,都会向服务器请求配置数据,如果网络环境不好或者他们的免费版所在的服务器负载过重的时候,数据不能及时返回,你的本地配置就会抽筋。另外他们的免费版会限制很多功能,某些功能收费还不低。

    BugTags-1 BugTags-2 BugTags-3 BugTags-4

    二、开发步骤:

    1、产品需求:

            a、基本需求:实现摇一摇截图功能;

            b、扩展功能:

                 i、 对截图进行编辑、上传(服务器、邮箱、储存到本地)。

                 ii、用户可以自定义界面、自定义上传设置(上传到哪里:服务器?邮箱?还是储存到                            本地。)。

    2、功能分类:

    3、开发步骤:

    4、技术解析:

    1、核心、精确捕捉到摇一摇事件。捕捉到事件后给出回调:回调方式:block、delegate、NotificationCenter。

    2、在摇一摇事件回调中实现下一步操作,这一步操作和上一步和可以分离:低耦合。

    3、不能冲突,原有的某个viewController中有特色的摇一摇功能(事件传递路径问题)。

    4、全局响应。

    5、摇一摇回调——到——截图成功回调——需要登录吗——编辑——反馈——上传。

    5、扩展迭代:

    1、response类的分层——几个地方都有的。


    技术方案:选择及依据——这里你会看到,一个小小的需求能影响到整个技术方案的选型。如果已经做好的东西确实不能满足某个方案,那么只能把该方案全部推翻重做,其工作量是可想而知的。(关键因素:不能冲突,原有的某个viewController中有特色的摇一摇功能(事件传递路径问题));runtime检测当前类中是否有motionBegan等函数,或者event事件传递的hittest。自动检测,或是将要排除的类添加到数组中去。设置开关是否检测。

    有关响应者链:(你可以网上搜索,很多例子的,但是自己要甄别)

    http://www.jianshu.com/p/2e074db792ba

    http://www.cocoachina.com/ios/20160113/14896.html

    http://www.cocoachina.com/ios/20160108/14897.html

    http://blog.csdn.net/st646889325/article/details/53167715?ref=myread

    与此有关的Apple官方文档(UIResponder):

    https://developer.apple.com/documentation/uikit/uiresponder?language=objc

    https://developer.apple.com/documentation/uikit/understanding_event_handling_responders_and_the_responder_chain?language=objc


    运动事件(这里主要关注Shake事件)

    CMMotionManager(使用物理硬件):

    http://blog.csdn.net/ejialin/article/details/19511897

    http://blog.csdn.net/Goods_boy/article/details/70240848

    http://blog.csdn.net/SandyLoo/article/details/52692302

    http://blog.csdn.net/sw_gegewu/article/details/51361915

    MotionEvent(苹果封装好的运动事件):

    http://blog.csdn.net/mazy_ma/article/details/51407191

    http://blog.csdn.net/aaaa99996666/article/details/51459564

    http://blog.csdn.net/haogaoming123/article/details/44856563

    http://www.cnblogs.com/eagle927183/p/shakeandcutter.html

    CMMotionManager(官方文档):

    https://developer.apple.com/documentation/coremotion/cmmotionmanager?language=objc

    Github上的资料:

    https://github.com/hwzss/Shake_learn

    + (void)load函数相关:

    http://www.jianshu.com/p/9368ce9bb8f9

    http://www.cocoachina.com/ios/20161012/17732.html

    http://liumh.com/2015/07/29/ios-load-and-initialize/#understand-load

    目前的一个版本:

    请看workplace中的工程shakeMotion。shakeMotion地址。

    注意,这并不是一个简单的摇一摇,而是以此为入口,展开的一系列技术细节。

    包括:窗口继承层次,Event响应链,controller栈的层次,runtime等等。

    相关文章

      网友评论

          本文标题:摇一摇:截屏、反馈(持续改进中...)

          本文链接:https://www.haomeiwen.com/subject/mnkomxtx.html