zoukankan      html  css  js  c++  java
  • Github上Fork代码,及源码修改

    iOS开发中经常遇到这种情况,你使用的第三方库不能完全满足自己项目需要,只能修改源码来解决。
    我们以前的解决办法是,添加到项目中直接修改源码。这样就有一个问题,不能和源库同步,当作者更新后你不能(pod update)更新,否则自己原来的修改就被冲掉了。所以只能选择不更新,或者更新后重新修改源码。

    当第三方库更新时如何同步更新?Git的Fork功能解决了这种问题,当你fork别人的开源代码后,你可以随意的修改。当然你对自己的修改满意还可以请求合并到(pull request)原作者项目中去。

    今天具体讲解如何在Github上Fork别人的代码,进行二次开发。下面以iOS-Charts为例,上一篇文章中我对这个开源库做了介绍。

    1.首先你要有自己的Github账号
    2.进入https://github.com/danielgindi/Charts 你要Fork项目的首页点击右上角Fork
    3.到自己项目列表就可以看到刚刚Fork的项目了

    现在你就可以当做自己的项目,随意的更改了。如果修改完之后你想和原来库合并,贡献自己的代码,就点击自己项目中的“New Pull Request”请求合并。作者同意后就可以在项目中看到自己贡献的代码了。

    下面讲解本文的重点,如何修改源码满足自己项目需求。修改时注意一下几点:

    1.改源码首先当然是读懂源码了,读懂后才知道从何下手。
    2.查看源码时一开始不止如何下手,对于一些UI控件我的解决方式是采用“注释法”,先把不知道的代码注释掉然后运行查看效果,通过对比界面可以简单直接的看到代码在操控那里。
    3.修改时要考虑如何最小的改动满足自己需求,可以尝试添加子类或者分类的形式解决。
    4.实在没办法只能修改源码了,修改源码的地方最好做上标记,方便自己查看、修改。
    

    举个例子,我们想要修改点击Charts高亮时的高亮线的形式,改之前的效果如下:


    我们想要隐藏掉水平高亮线,只显示垂直高亮线,如下图所示:

    通过查看源码我们可以知道LineChartDateSet的属性drawVerticalHighlightIndicatorEnabled是控制是否显示垂直高亮线的,我们简单推理,通过搜索这个属性我们应该能找到如何绘制高亮线的代码。

    通过全局搜索 drawVerticalHighlightIndicatorEnabled结果如下图:

    并没有找到绘制高亮线的代码,查看属性定义的地方发现drawVerticalHighlightIndicatorEnabled是存储属性,还有一个对应的计算性属性isVerticalHighlightIndicatorEnabled,我们接下来全局搜索isVerticalHighlightIndicatorEnabled ,结果如下:

    通过注意查看,我们可以确定LineScatterCandleRadarChartRenderer.swift有绘制高亮线的地方,如下图:

    可以发现35-38行是控制如何绘制竖直高亮线的代码,我们注释掉,

    换成使用图片来绘制的代码,修改成如下代码(前提准备一张高亮图”highlight_line”):

    CGContextSaveGState(context);
    //获得高亮线图片
    let lineImage = NSUIImage(named: "highlight_line")
    //绘制
    lineImage?.drawInRect(CGRectMake(point.x-5.0/2.0, viewPortHandler.contentTop, 5, viewPortHandler.contentBottom - viewPortHandler.contentTop))
    
    CGContextRestoreGState( context );
    

    运行看下效果轻松搞定。

    文章转载自:lvesli

  • 相关阅读:
    递归
    lecture-11
    最近公共祖先LCA
    微软面试100题
    0-1背包问题
    ubuntu网络已禁用解决办法
    cors(cross-resource-oragin-sharing 跨域资源共享) 解决跨域问题
    本地修改域名对应的IP地址
    oracle 解锁用户被锁住
    oracle 改变表中 某列的数据类型(该列已有数据)
  • 原文地址:https://www.cnblogs.com/dongliu/p/6856552.html
Copyright © 2011-2022 走看看