DrawRect:DrawRect屬于CoreGraphic框架拭嫁,占用CPU榴嗅,消耗性能大CAShapeLayer:CAShapeLayer屬于CoreAnimation框架屿笼,通過(guò)GPU來(lái)渲染圖形猿诸,節(jié)省性能干跛。動(dòng)畫(huà)渲染直接提交給手機(jī)GPU,不消耗內(nèi)存
貝塞爾曲線與CAShapeLayer的關(guān)系
CAShapeLayer中shape代表形狀的意思酝润,所以需要形狀才能生效2.貝塞爾曲線可以創(chuàng)建基于矢量的路徑3.貝塞爾曲線給CAShapeLayer提供路徑燎竖,CAShapeLayer在提供的路徑中進(jìn)行渲染。路徑會(huì)閉環(huán)要销,所以繪制出了shape4.用于CAShapeLayer的貝塞爾曲線作為path构回,其path是一個(gè)首尾相連接的閉環(huán)曲線,即使該貝塞爾曲線不是一個(gè)閉環(huán)的曲線CAShapeLayer比CALayer做動(dòng)畫(huà)更加復(fù)雜疏咐,普通CALayer在被初始化的時(shí)候是需要給一個(gè)frame的值的纤掸,這個(gè)frame值一般都與給定view的bounds值一致,它本身是有形狀的浑塞,而且是矩形借跪。
CAShapeLayer在初始化的時(shí)候也需要給一個(gè)frame值,但是酌壕,它本身沒(méi)有形狀垦梆,它的形狀來(lái)源于你給定的一個(gè)path,然后它去取CGPath值仅孩,它與CALayer有區(qū)別
CAShapeLayer有著幾點(diǎn)很重要:1.它依附于一個(gè)給定的path,必須給予path印蓖,而且辽慕,即使path不完整也會(huì)自動(dòng)首尾相連接
2.storkeStart遺跡strokeEnd代表著在這個(gè)path中所占 用的百分比
CAShapeLayer動(dòng)畫(huà)僅僅限于沿著邊緣的動(dòng)畫(huà)效果,它實(shí)現(xiàn)不了填充效果
以下給出如何使用CAShapeLayer實(shí)現(xiàn)畫(huà)圓的效果
//創(chuàng)建一個(gè)view UIView *showView = [[UIViewalloc] initWithFrame:CGRectMake(100,100, 100, 100)];[self.viewaddSubview:showView];//showView.backgroundColor = [UIColor redColor];showView.alpha =0.5;//bezier曲線UIBezierPath *path = [UIBezierPathbezierPathWithArcCenter:CGPointMake(100/2.f,100/2.f)radius:100/2.fstartAngle:0endAngle:M_PI *2 clockwise:YES];//創(chuàng)建一個(gè)shapeLayerCAShapeLayer layer = [CAShapeLayerlayer];layer.frame = showView.bounds;layer.strokeColor = [UIColorgreenColor].CGColor; //邊緣線的顏色layer.fillColor = [UIColorclearColor].CGColor; //閉環(huán)填充的顏色layer.lineCap =kCALineCapSquare; //邊緣線的類型layer.path = path.CGPath; //從bezier曲線獲取到的形狀layer.lineWidth =4.0f; //線條寬度layer.strokeStart =0.0f;layer.strokeEnd =0.0f;//將layer添加進(jìn)圖層[showView.layeraddSublayer:layer];//3s后執(zhí)行動(dòng)畫(huà)操作(直接賦值就能產(chǎn)生動(dòng)畫(huà)效果)[selfperformSelector:@selector(changeStatus:)withObject:layer afterDelay:3.0];//產(chǎn)生動(dòng)畫(huà)效果- (void)changeStatus:(CAShapeLayer )layer{layer.speed =0.1;layer.strokeStart =0.0;layer.strokeEnd =1.0f;layer.lineWidth =4.0f;}/--------------------------------這是分割線------------------------------------------//**********************使用CABasicAnimation(基本動(dòng)畫(huà)實(shí)現(xiàn)同樣的效果)*************************///給這個(gè)layer添加動(dòng)畫(huà)效果CABasicAnimation *pathAnimation = [CABasicAnimationanimationWithKeyPath:@"strokeEnd"];pathAnimation.duration =1.0;pathAnimation.fromValue = [NSNumbernumberWithFloat:0.0f];pathAnimation.toValue =[NSNumbernumberWithFloat:1.f];//使視圖保留到最新?tīng)顟B(tài)pathAnimation.removedOnCompletion =NO;pathAnimation.fillMode =kCAFillModeForwards;[layeraddAnimation:pathAnimation forKey:nil];
關(guān)于cashaplayer的更多介紹:http://blog.csdn.net/mengtnt/article/details/7464187
作者:iOS小喬鏈接:http://www.reibang.com/p/55af78132baf來(lái)源:簡(jiǎn)書(shū)著作權(quán)歸作者所有赦肃。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)溅蛉,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。