利用IOS画图功能画出五角星,并且可以调整五角星的填充范围
2013-07-02 10:57
399 查看
我们要花的为一个黄色的五角星
并且其中的填充黄色能够任意调整,比如只填满半个五角星,或者只填满一个角等等。
首先要重写DrawRect 方法,然后在这里实现我们的画图代码。
由于这样的五角星是中空的,所以我们选取十个点,首先五角星五个尖在一个大圆上,且在大圆上平均分布,内角的五个点在一个小圆上,也是平均分布。
最后创建路径。创建好路径后要进行色彩填充,分为描边以及内容。
描边为黑色,内容为黄色
这里的self.value是一个0-1的值,用来表示星星填充的范围,为1代表整个星星全部填充为黄色。
这里设置一个变量range 描绘了这个星星需要填充的范围
最后利用CGContextFillRect 这个方法 将range范围进行黄色填充
并且其中的填充黄色能够任意调整,比如只填满半个五角星,或者只填满一个角等等。
首先要重写DrawRect 方法,然后在这里实现我们的画图代码。
- (void)drawRect:(CGRect)rect { CGFloat centerX = rect.size.width / 2; CGFloat centerY = rect.size.height / 2; CGFloat r0 = self.radius * sin(18 * th)/cos(36 * th); /*计算小圆半径r0 */ CGFloat x1[5]={0},y1[5]={0},x2[5]={0},y2[5]={0}; for (int i = 0; i < 5; i ++) { x1[i] = centerX + self.radius * cos((90 + i * 72) * th); /* 计算出大圆上的五个平均分布点的坐标*/ y1[i]=centerY - self.radius * sin((90 + i * 72) * th); x2[i]=centerX + r0 * cos((54 + i * 72) * th); /* 计算出小圆上的五个平均分布点的坐标*/ y2[i]=centerY - r0 * sin((54 + i * 72) * th); } CGContextRef context = UIGraphicsGetCurrentContext(); CGMutablePathRef startPath = CGPathCreateMutable(); CGPathMoveToPoint(startPath, NULL, x1[0], y1[0]); for (int i = 1; i < 5; i ++) { CGPathAddLineToPoint(startPath, NULL, x2[i], y2[i]); CGPathAddLineToPoint(startPath, NULL, x1[i], y1[i]); } CGPathAddLineToPoint(startPath, NULL, x2[0], y2[0]); CGPathCloseSubpath(startPath); CGContextAddPath(context, startPath); CGContextSetFillColorWithColor(context, self.startColor.CGColor); CGContextSetStrokeColorWithColor(context, self.boundsColor.CGColor); CGContextStrokePath(context); CGRect range = CGRectMake(x1[1], 0, (x1[4] - x1[1]) * self.value , y1[2]); CGContextAddPath(context, startPath); CGContextClip(context); CGContextFillRect(context, range); CFRelease(startPath); }
由于这样的五角星是中空的,所以我们选取十个点,首先五角星五个尖在一个大圆上,且在大圆上平均分布,内角的五个点在一个小圆上,也是平均分布。
最后创建路径。创建好路径后要进行色彩填充,分为描边以及内容。
描边为黑色,内容为黄色
这里的self.value是一个0-1的值,用来表示星星填充的范围,为1代表整个星星全部填充为黄色。
这里设置一个变量range 描绘了这个星星需要填充的范围
最后利用CGContextFillRect 这个方法 将range范围进行黄色填充
相关文章推荐
- iOS开发:一个瀑布流的设计与实现(已实现缓存池功能,该功能使得瀑布流cell可以循环利用)
- iOS开发:一个瀑布流的设计与实现(已实现缓存池功能,该功能使得瀑布流cell可以循环利用)
- 画图工具:可以用鼠标在屏幕上画线,并且可以改变线条
- 企业仓库管理软件免费版要把处理好三个问题 利用凌云仓库管理软件免费版的智能补货功能可以快速的指定采购策略,这里面就需要及时了解每一张采购订单的执行情况,不但要防止遗漏订单情况的发生,更要防止情绪化采购
- android 利用accessibilityservice 实现自动发红包功能 (让收红包的人手抽筋)(密码不能自动输入,可以开启指纹支付)
- iOS利用drawRect画图
- 黑客利用网页自动填充功能导流至恶意网站
- 通过 JS 实现简单的拖拽功能并且可以在特定元素上禁止拖拽
- matlab 画图plot 标记符大小调整和填充
- 博客园利用Word发布博客功能[其他博客也可以如此使用]
- 利用Jqurey写一个输入内容增加并且可以删除,上下移动的标签
- IOS UILabel调整行高间距(利用iOS 6的特性来手动调整行间矩)
- 利用UIActivityController调用ios系统自带的分享功能,实现微信发布多图的功能
- 利用JS实现可以自由拖拽调整宽度的表格
- 利用实现数据同步功能, 已经完成测试,可以实现.
- 4程序员小飞原计划三天完成某个任务,现在是第三天的下午,他马上就可以做完。但是在实现功能的过程中,他越来越意识到自己原来设计中的弱点,他应该采取另一个办法,才能避免后面集成阶段的额外工作。但是他如果现在就改弦更张,那势必要影响自己原来估计的准确性,并且会花费额外的时间,这样他的老板、同事也许会因此看不起他。如果他按部就班地按既定设计完成,还要花更多时间在后续集成上,但那就不是他个人的问题了,怎么办
- iOS开发- 文件共享(利用iTunes导入文件, 并且显示已有文件)
- 利用iOS实现系统相册大图浏览功能详解
- 在开发iOS程序时,有时候需要将时间格式调整成自己希望的格式,这个时候我们可以用NSDateFormatter类来处理。 例如: //实例化一个NSDateFormatter对象 NSDateFor
- iOS开发技巧 - 使用UISlider来调整值的范围