IOS-使用CAShapLayer繪制扇形


IOS-使用CAShapLayer繪制扇形

 

為了增加應用體驗感,我們動態繪制扇形或者餅狀圖效果。

這里我們使用CAShapeLayer,這樣就不必再-(void)draw函數內繪制圖形

參考代碼

 

-(void)reDraw

{

    CAShapeLayer *chartLine;

    if (chartLine!=nil)

    {

        [chartLine removeAllAnimations];//這樣就能重復繪制餅狀圖了

    }

    else

    {

    chartLine = [CAShapeLayerlayer];

        chartLine.lineWidth = 40;//這里設置填充線的寬度,這個參數很重要

        chartLine.lineCap = kCALineCapButt;設置線端點樣式,這個也是非常重要的一個參數

        chartLine.strokeColor = [[UIColor redColor] CGColor];//繪制的線的顏色

        chartLine.fillColor = nil

 

        self.clipsToBounds = NO;//該屬性表示如果圖形繪制超過的容器的范圍是否被裁掉,這里我們設置為YES ,表示要裁掉超出范圍的繪制

        [self.layer addSublayer:chartLine];

    }

 

    CGMutablePathRef pathRef  = CGPathCreateMutable();

    CGPathAddArc(pathRef, &CGAffineTransformIdentity,

                 CGRectGetWidth(self.frame)/2, CGRectGetHeight(self.frame)/2, 60, 0, M_PI*3/2, NO);

    chartLine.path = pathRef;

 

    CABasicAnimation *pathAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];

    pathAnimation.duration = 1.1;//設置繪制動畫持續的時間

    pathAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];

    pathAnimation.fromValue = [NSNumber numberWithFloat:0.0f];

    pathAnimation.toValue = [NSNumber numberWithFloat:1.0f];

    pathAnimation.autoreverses = NO;//是否翻轉繪制

    pathAnimation.fillMode = kCAFillModeForwards;

    pathAnimation.repeatCount = 1;

 

    [chartLine addAnimation:pathAnimation forKey:@"strokeEndAnimation"];

    chartLine.strokeEnd=1.0f;//表示繪制到百分比多少就停止,這個我們用1表示完全繪制

}

我們先來看看繪制的效果圖:

這里我們有必要說下,扇形(餅狀圖的原理),我們繪制的其實不是扇形,可以說是圓形,我們只是將圓形的邊線寬度變得很寬,比如:我們想要繪制的圓形的半徑是 R = 100,如果我們想繪制扇形就可以設置變寬為 200,因為,線是從中間到圓心來標定半徑的,這樣,邊線寬度= 200,那么,從邊線重新到圓心的距離就是200/2 = 100,這樣你看,100==R,這樣,效果就看起來我們繪制的是餅狀圖了。我們繪制的不是真正的餅狀圖,而是用其他的方法繪制餅狀圖的效果而已,這里我們特別需要主要的是,如果你想成功的繪制餅狀圖,那么你就需要掌握好,圓形半徑以及圓形邊線的寬度值,以及他們之間的比例關系,因為他們之間的關系決定了你要繪制的餅狀圖的效果以及形狀,比如:時候中間有空心,以及空心的大小。

 

Jason

2014年03月21日


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM