CGPathAddArc

使用CGPathAddArc使UIView的Layer绕中心点旋转

2012-12-04
15:38 775人阅读 评论(0) 收藏 举报

animationAnimationiosiOSIOSlayerpathPATHPathuiviewUIViewUIVIew

[plain] view plaincopy

  1. float angle = 360 / 6;

  2. for (int i = 0; i < 6; i++) {

  3. UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];

  4. float offsetAngle = angle * i;

  5. button.bounds = CGRectMake(0, 0, 32, 32);

  6. button.center = CGPointMake(cos(offsetAngle * RADIANS) * 160, sin(offsetAngle * RADIANS) * 160);

  7. button.tag = i;

  8. CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];

  9. CGMutablePathRef path = CGPathCreateMutable();

  10. pathAnimation.calculationMode = kCAAnimationPaced;

  11. pathAnimation.fillMode = kCAFillModeForwards;

  12. pathAnimation.removedOnCompletion = NO;

  13. pathAnimation.duration = 2;

  14. CGPathMoveToPoint(path, NULL, button.center.x, button.center.y);

  15. CGPathAddArc(path, NULL, 0, 0, 160, offsetAngle * M_PI/180, offsetAngle * M_PI/180 + M_PI, YES);

  16. pathAnimation.path = path;

  17. CGPathRelease(path);

  18. [button.layer addAnimation:pathAnimation forKey:@"curve"];

  19. [tabBarView addSubview:button];

  20. }

因为只是Layer的内容发生的位置变化,其实UIView还是在原来的位置上,如果需要使用应该在Animation结束后重新设定UIView的位置.

顺便翻译一下原文:

CGPathAddArc (

CGMutablePathRef path,

const CGAffineTransform *m,

CGFloat x,

CGFloat y,

CGFloat radius,

CGFloat startAngle,

CGFloat endAngle,

bool clockwise

);

path:动画的路径;

m:layer的transform;

x:其实x和y是什么我还没弄明白,根据原文应该是弧的圆心点,但我设置过,这更像是偏移量;

y:同上;

startAngle:起始的角度点,零度是与x轴相交点,度数为顺时针;

endAngle:结束的角度点;

clockwis:是否顺时针.

时间: 2024-11-05 20:26:03

CGPathAddArc的相关文章

CGPathAddArc vs CGPathAddArcToPoint

CGContextAddArc : 红线是我们想要画的, sA 是startAngle, eA 为 endAngle, r 是半径, x 和 y 对应参数中的 x 和 y. 如果有前置点,方法将画一条从该点到狐的起点,除非你非常小心,不然这条线不会和弧线同一个方向. CGContextAddArcToPoint : P1是path的当前点,x1, x2, y1, y2 对应方法中 x1, x2, y1, y2,r 为半径.弧线将开始于当前点和(x1,y1)组成的直线并结束于(x1,y1)和(x2

iOS Quartz: CGPathAddArc和CGPathAddArcToPoint函数

CGPathAddArc函数是通过圆心和半径定义一个圆,然后通过两个弧度确定一个弧线.注意弧度是以当前坐标环境的X轴开始的. 需要注意的是由于iOS中的坐标体系是和Quartz坐标体系中Y轴相反的,所以iOS UIView在做Quartz绘图时,Y轴已经做了Scale为-1的转换,因此造成CGPathAddArc函数最后一个是否是顺时针的参数结果正好是相反的,也就是说如果设置最后的参数为YES,根据参数定义应该是顺时针的,但实际绘图结果会是逆时针的! 比如,我们设置起点弧度为0,终点弧度为1.5

CGPathAddArc &amp; CGPathAddArcToPoint

参考:http://blog.csdn.net/xcysuccess3/article/details/24001571 CGPathAddArc 注意:由于iOS中的坐标体系是和Quartz坐标体系中Y轴相反的,所以iOS UIView在做Quartz绘图时,Y轴已经做了Scale为-1的转换,因此造成CGPathAddArc函数最后一个是否是顺时针的参数结果正好是相反的,也就是说如果设置最后的参数为YES,根据参数定义应该是顺时针的,但实际绘图结果会是逆时针的. 其实Quartz 2D的坐标

UIKit框架(17)Quartz2D

Quartz2D介绍 什么是Quartz2D ? 是一个二维绘图引擎,同时支持iOS和Mac系统. Quartz2D的价值? 但是有些UI界面极其复杂,而且比较个性化,用普通的UI控件无法实现,这时可以利用Quartz2D技术将控件内部的结构画出来,自定义控件的样子. 其实,iOS中大部分控件的内容都是由Quartz2D画出来的 (有一些是通过WebKit渲染的) 开发方式? 使用框架CoreGraphics Quartz2D是一套C语言API,但使用了面向对象的开发方式 图像上下文对象: 是最

Quartz 2D

1.什么是Quart 2D呢? 不知道,但是可以通过Quart2D绘制图形,自定义控件等等. 2.如何通过Quart 2D绘制图形和自定义控件? 有两种方式:C语言/OC;OC其实最后还是转换成C,那么用C会不会效率稍高? 3.基本图形的绘制 C语言方式 获取当前图形上下文 : CGContextRef ctx = UIGraphicsGetCurrentContext(); 绘制图形: 圆:CGContextRef _Nullable c:图形上下文; CGFloat x, CGFloat y

CoreGraphics--饼状图

//传入数据,饼状图 pieChartView.dataArr = @[@20,@50,@80,@70,@40]; - (void)drawRect:(CGRect)rect { // Drawing code #if 0 //贝塞尔路径 UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(50, 50, 100, 100)]; //Oval 椭圆 //线条颜色 [[UIColor redColor] se

Paths中的几个重要元素

Paths中的几个重要元素 Points void CGContextMoveToPoint ( CGContextRef c, CGFloat x, CGFloat y ); 指定一个点成为current point Quartz会跟踪current point一般执行完一个相关函数后,current point都会相应的改变. Lines 相关的几个函数 void CGContextAddLineToPoint ( CGContextRef c, CGFloat x, CGFloat y )

Quartz 官网翻译(转载)

Paths中的几个重要元素 Points void CGContextMoveToPoint ( CGContextRef c, CGFloat x, CGFloat y ); 指定一个点成为current point Quartz会跟踪current point一般执行完一个相关函数后,current point都会相应的改变. Lines 相关的几个函数 void CGContextAddLineToPoint ( CGContextRef c, CGFloat x, CGFloat y )

iOS Drawing Concepts[iOS 绘画概念]

iOS Drawing Concepts https://developer.apple.com/library/ios/documentation/2DDrawing/Conceptual/DrawingPrintingiOS/GraphicsDrawingOverview/GraphicsDrawingOverview.html High-quality graphics are an important part of your app’s user interface. Providin