drawRect是软件画图非常慢,而且几乎每次升级系统都会变得更慢。一般的硬件加速画图是用CALayer拼的,或者直接用OpenGL画。
创新互联业务包括:成品网站、企业产品展示型网站建设、高端网站设计、电子商务型网站建设、成都外贸网站建设(多语言)、商城网站定制开发、按需网站建设、营销型网站等。效率优先,品质保证,用心服务是我们的核心价值观,我们将继续以良好的信誉为基础,秉承稳固与发展、求实与创新的精神,为客户提供更全面、更优质的互联网服务!
对于iOS柱状图,不是有什么难度的效果, gayhub 上也有很多优秀的第三方库,比如 AAChartKit 、 XYPieChart 、 PNChart 、 Charts 等好多,不过这些类库大多封装的太厉害了,如果你的项目只是单纯的几个柱状图、那么使用这些库其实挺费劲的(学习成本+项目大小),下面说说我的思路。
iOS绘图以及图形处理主要使用的是 Core Graphics / QuartZ 2D ,这也是大部分人写柱状图的方法,即使用 UIBezierPath 配合 Core Graphics 实现。我的思路是使用 UICollectionView ,不过使用 UICollectionView 实现柱状图,最好需求能满足以下二点:
当然,也并不是一定要满足上面2点,接下来用几个小Demo演示一下(注:Demo是Objective-C实现)
这个是基本的效果,使用 UICollectionViewFlowLayout 布局,将 scrollDirection 设置为 UICollectionViewScrollDirectionHorizontal ;每个 cell 内部有个绿色的 UIView ,根据数值调整这个绿色 UIView 的高度,就是图上的效果了,其实核心就是 UICollectionViewFlowLayout ,后面几个Demo也全是基于此。
这个效果是加了横坐标值和渐变Cell,每个柱状图重新出现屏幕上时,会动画出现,需要注意的是,渐变使用的是 CAGradientLayer ,但是对含有 CAGradientLayer 的view使用 frame 动画,会造成渐变的卡顿和动画的不流畅,所以这里是使用 CAGradientLayer 生成一张渐变图,设置成柱状图柱子的背景即可。
这个效果是始终以中间的Cell为基准显示,点击其他Cell也会自动滚到中心。因为 UICollectionView 继承于 UIScrollView ,所以实现这种效果,关键在于两个代理方法:
具体的原理,可以查看这篇优秀的文章: UIScrollView 实践经验
这个效果的目的是:有的需求是柱状图比较密集,当手指滑动时又要求可以显示出对应柱子的值。其实实现起来很简单,就是使用 touchesBegan:withEvent: 以及 touchesMoved:withEvent: 等几个方法即可。
这个是有柱状图的同时,还有曲线图,实现方法是在 UICollectionView 上面加了一个透明的 UIView ,同时通过此 UIView 的 hitTest:withEvent: 方法,将事件给到 UICollectionView ,再通过 UICollectionView 的代理方法,获取界面上的Cell,绘制曲线到 UIView 上。需要注意的是, UICollectionView 的 visibleCells 方法,获取到的Cell,顺序不是界面上的顺序,需要排序之后再使用。
其实通过 UIView 的 hitTest:withEvent: 方法,能做很多神奇的事情,大家可以自行研究。
这个没啥,就是说明如果有复杂的坐标,也是可以实现的,这个Demo的做法是在 UICollectionView 下面有一个 UIView 专门绘制坐标系。
这个其实跟柱状图没有关系,大家都知道,安卓的刷新和iOS不一样,下拉刷新分为 侵入式 和 非侵入式 ,对于iOS而言,由于 UIScrollView 的 Bounce 效果,所以使用侵入式下拉刷新,成了最好的选择,但是iOS能否实现安卓那样的非侵入式刷新呢?于是本Demo就简单研究了一下,目前是存在bug的,样式也粗糙,不过思路应该没有问题,提供给大家,可以研究研究:
至此,本文就没了,其实本文没啥技术含量,说白就是 UICollectionView 的使用,不过主要目的是给大家提供思路,具体需求还得具体分析。
本文Demo地址: GitHub
END。
我是小侯爷。
在帝都艰苦奋斗,白天是上班族,晚上是知识服务工作者。
如果读完觉得有收获的话,记得关注和点赞哦。
非要打赏的话,我也是不会拒绝的。
你好 这是我总结的画图资料 比如画一条蓝色的x号线 plot(x,y,'bg') 画图: 线形:-实线 -. 点划线 --长虚线 :短虚线 符号 颜色 符号 线形 b 蓝 . 点 c 青 。 圈 g 绿 × ×标记 k 黑 - 实线 m 紫红 * 星号 r 红 : 点线 w 白 -. 点划线 y ...
你好。
很高兴为你解答。
DSBarChart 是 iOS 用来显示柱状图的控件,你可以下载控件尝试。
单轨迹线条绘制设置线宽,动画进可以通过 KeyPath 设置为 strokeEnd 进行渲染,达到动态渲染的目的
简单绘制一个三角形,bezierPath 调用 closePath 时, 绘制的线路必须是闭合的 ,再调用 closePath 才能闭合,但是动画设置为 strokeEnd 却无效,需要重新设置动画组合 CAAnimationGroup 才能添加渲染动画
绘制如图图形
通过折线图绘制,可以满足部分柱状图的需求,同时添加延展动画