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

Github上Fork代码,及源码修改的更多相关文章

  1. 设计比较好,有助于学习的Github上的iOS App源码 (中文)

    Github版 中文 : TeamTalk 蘑菇街. 开源IM. 电商强烈推荐. MyOne-iOS 用OC写的<一个> iOS 客户端 zhihuDaily 高仿知乎日报 Coding ...

  2. Github上的iOS App源码 (中文)

    Github版英文App地址 中文 : TeamTalk 蘑菇街. 开源IM. 电商强烈推荐. MyOne-iOS 用OC写的<一个> iOS 客户端 zhihuDaily 高仿知乎日报 ...

  3. git更新Activemq在远程github上指定版本的源码步骤

    第一步:根据地址克隆源码 (activemq-5.9) $  git  clone   https://github.com/apache/activemq.git 第二步:查看远程源码的版本清单 ( ...

  4. 如何在github上fork以及同步原作者代码

    参考网址:https://blog.csdn.net/llll2020/article/details/86140488 转  GitHub上fork别人打代码后如何保持和原作者同步的更新 </ ...

  5. openfire源码修改后如何打包部署到linux服务器上

    原文:http://blog.csdn.net/jinzhencs/article/details/50457152 1.linux版本的3.10.3解压部署启动(过程略,参考我的另一篇博文http: ...

  6. github上fork原项目,如何将本地仓库代码更新到最新版本?

    场景: 在github上fork原项目,项目组成员发起pull request提交了代码,这时自己在本地仓库该如何更新到最新代码? 操作方法如下: 方法一.从github上进行操作然后更新 登录自己的 ...

  7. 如何fork比特币的源码并同步更新到本地

    一.首先在Github上fork比特币源码,就会在自己的项目库里创建一份比特币代码的拷贝.   打开https://github.com/bitcoin/bitcoin,点击右上角的“Fok”图标,稍 ...

  8. element-ui2源码修改小问题

    最近element-ui升级到2了,添加了不少功能,可喜可贺,可喜可贺! 然而,产品的需求依然那么刁钻,上传与删除图片还是要去改源码,为了同时用新的ele,决定在2中改源码 然而,遇到问题了. 一开始 ...

  9. el-upload源码修改跳坑

    之前给element-ui提了一个问题,结果没有鸟我,没办法,只能修改源码来满足需求了 (备注:element-ui2依然没有修改,为了迎合产品还是要改源码) 本文讨论的组件属性仅限于list-typ ...

随机推荐

  1. Less的安装与配置

    Less的安装与配置 Less与Sass 先说一段题外话,很多初学者在选择CSS 预处理语言不免会感到犹豫,作为CSS 的两大预处理语言Less与Sass,各自都有着很广泛的使用群体,我究竟该选哪个好 ...

  2. es安装脚本

    #!/bin/bash file_name="/sdzw/es5/conf/es.config" #安装目录 install_dir="/es5/esinstall&qu ...

  3. idea启动dubbo

    jetty 方式启动dubbo. 首先为dubbo 添加jetty mven 插件: http://www.eclipse.org/jetty/documentation/current/jetty- ...

  4. 在页面左右一个悬浮div兼容IE6 IE7 8 9 Firefox chrome

    在页面左右一个悬浮div兼容IE6 IE7 8 9 Firefox chrome #identifier-pannel { bottom: 345px; margin-left: 512px; pos ...

  5. Android常用传感器用法一览(2)

    在Android2.3 gingerbread系统中,google提供了11种传感器供应用层使用. #define SENSOR_TYPE_ACCELEROMETER       1 //加速度#de ...

  6. 对PHP中类、继承、抽象的理解(个人总结)

    1,PHP中的类可以被继承:A extends B. 2,类被声明为abstract时:a.该类就仅仅包含模版,我们就不能创建该类的实例对象,必须通过继承来使用new创建对象. b.继承一个抽象类的时 ...

  7. 转:java中数组与List相互转换的方法

    1.List转换成为数组.(这里的List是实体是ArrayList) 调用ArrayList的toArray方法. toArray public <T> T[] toArray(T[] ...

  8. iOS Mapkit 定位REGcode地理位置偏移

    在iOS上,使用系统Mapkit定位,获取到的坐标会有偏移: 今有需求,用系统Mapkit定位,并Regcode出实际地理位置,修正偏移: 解决方案: 使用MapView的代理 - (void)map ...

  9. vue - check-versions.js for semver

    引入的是一个语义化版本文件的npm包,其实它就是用来控制版本的,详情见:https://www.npmjs.com/package/semver 用谷歌翻译npm文档 semver.valid('1. ...

  10. 课程分享 企业普及版贝斯OA与工作流系统

    企业普及版贝斯OA与工作流系统 基于J2EE+JBPM3.x/JBPM4.3+Flex流程设计器+Jquery+授权认证企业普及版贝斯OA与工作流系统 假设对这个课程有兴趣的.能够和我联系.QQ205 ...