1. 程式人生 > >圓角優化APP效能產生明顯提升

圓角優化APP效能產生明顯提升

優化方案1:使用貝塞爾曲線UIBezierPath和Core Graphics框架畫出一個圓角

    UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];

    imageView.image = [UIImage imageNamed:@"about"];

    //開始對imageView進行畫圖

    UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, NO, 1.0);

    //使用貝塞爾曲線畫出一個圓形圖

    [[UIBezierPath bezierPathWithRoundedRect:imageView.bounds cornerRadius:imageView.frame.size.width] addClip];

    [imageView drawRect:imageView.bounds];

    imageView.image = UIGraphicsGetImageFromCurrentImageContext();

    //結束畫圖

    UIGraphicsEndImageContext();

    [self.view addSubview:imageView];

優化方案2:使用CAShapeLayer和UIBezierPath設定圓角

UIImageView *imageView=[[UIImageView alloc]initWithFrame:CGRectMake(100,100,100,100)];

    imageView.image=[UIImage imageNamed:@"about"];

     UIBezierPath *maskPath=[UIBezierPath bezierPathWithRoundedRect:imageView.bounds byRoundingCorners:UIRectCornerAllCorners cornerRadii:imageView.bounds.size];

    CAShapeLayer *maskLayer=[[CAShapeLayer alloc]init];

    //設定大小

    maskLayer.frame=imageView.bounds;

    //設定圖形樣子

    maskLayer.path = maskPath.CGPath;

    imageView.layer.mask=maskLayer;

    [self.view addSubview:imageView];

對於方案2需要解釋的是:

CAShapeLayer繼承於CALayer,可以使用CALayer的所有屬性值; CAShapeLayer需要貝塞爾曲線配合使用才有意義(也就是說才有效果) 使用CAShapeLayer(屬於CoreAnimation)與貝塞爾曲線可以實現不在view的drawRect(繼承於CoreGraphics走的是CPU,消耗的效能較大)方法中畫出一些想要的圖形 CAShapeLayer動畫渲染直接提交到手機的GPU當中,相較於view的drawRect方法使用CPU渲染而言,其效率極高,能大大優化記憶體使用情況。