基本繪圖的幾種方式,繪圖幾種方式

來源:互聯網
上載者:User

基本繪圖的幾種方式,繪圖幾種方式

1. drawRect:

  UIView子類重寫

2. drawLayer: inContext:

  CALayer設定代理 (這是個代理方法)

3. drawInContext:

  CALayer子類重寫

4. 使用圖形上下文產生圖片:

  imageContext

 盡量避免混用

                    -------實現 drawRect : 方法----------

   1、使用 UIKit      

      
        /**            1、UIView子類實現 drawRect: 方法                     2、在 UIKit 提供的當前上下文中繪製         */        - (void)drawRect:(CGRect)rect {                        // 貝瑟爾路徑描繪橢圓            UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(100, 100, 200, 100)];                        // 顏色填充            [[UIColor blueColor] setFill];                        // 填充到當前上下文            [path fill];}
View Code

     :

      

   2、使用Core Graphic

     
        /**            1、UIView子類實現 drawRect: 方法                     2、使用 Core Graphics 獲得當前上下文進行繪製         */        - (void)drawRect:(CGRect)rect {                        // 擷取當前上下文            CGContextRef context = UIGraphicsGetCurrentContext();                        // 繪製圖形            CGContextAddEllipseInRect(context, CGRectMake(100, 100, 200, 100));                        // 設定填充顏色            CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor);                        // 渲染            CGContextFillPath(context);        }
View Code

    :

      

-----------------------------------------------------------------------------------------------

                -------代理實現 drawLayer: inContext: 方法----------

  1、使用UIKit

      
            @implementation ViewController                        - (void)viewDidLoad{                 [super viewDidLoad];                             //1.建立自訂的layer                 CALayer *layer=[CALayer layer];                             //2.設定layer的屬性                 layer.backgroundColor=[UIColor brownColor].CGColor;                 layer.bounds=CGRectMake(0, 0, 200, 150);                 layer.anchorPoint=CGPointZero;                 layer.position=CGPointMake(100, 100);                 layer.cornerRadius=20;                 layer.shadowColor=[UIColor redColor].CGColor;                 layer.shadowOffset=CGSizeMake(10, 20);                 layer.shadowOpacity=0.6;                             //設定代理                 layer.delegate=self;                            // 觸發代理方法進行繪製                 [layer setNeedsDisplay];                             //3.添加layer                 [self.view.layer addSublayer:layer];             }                        -(void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx{                                // 將引用的上下文轉變成當前上下文。                UIGraphicsPushContext(ctx);                                // 繪製圖形                UIBezierPath* p = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(50,50,100,50)];                                [[UIColor blueColor] setFill];                                [p fill];                                                UIGraphicsPopContext();            }                        @end
View Code

   :

      

  2、使用Core Graphic

      
            @implementation ViewController                        - (void)viewDidLoad{                 [super viewDidLoad];                             //1.建立自訂的layer                 CALayer *layer=[CALayer layer];                             //2.設定layer的屬性                 layer.backgroundColor=[UIColor brownColor].CGColor;                 layer.bounds=CGRectMake(0, 0, 200, 150);                 layer.anchorPoint=CGPointZero;                 layer.position=CGPointMake(100, 100);                 layer.cornerRadius=20;                 layer.shadowColor=[UIColor redColor].CGColor;                 layer.shadowOffset=CGSizeMake(10, 20);                 layer.shadowOpacity=0.6;                             //設定代理                 layer.delegate=self;                 [layer setNeedsDisplay];                 //3.添加layer                 [self.view.layer addSublayer:layer];             }                        -(void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx{                                CGContextAddEllipseInRect(ctx, CGRectMake(50,50,100,50));                                CGContextSetFillColorWithColor(ctx, [UIColor blueColor].CGColor);                                CGContextFillPath(ctx);            }                        @end
View Code

    :

      

-----------------------------------------------------------------------------------------------

                -------自訂CALayer 重寫 drawInContext:----------

  1、使用UIKit 

      自訂Layer類:

        
                #import "DXLayer.h"                #import <UIKit/UIKit.h>                                @implementation DXLayer                                //重寫該方法,在該方法內繪製圖形                -(void)drawInContext:(CGContextRef)ctx{                                        UIGraphicsPushContext(ctx);                                        //1.繪製圖形                    UIBezierPath*p =[UIBezierPath bezierPathWithOvalInRect:CGRectMake(50,50,100,50)];                                    [[UIColor blueColor] setFill];                                    [p fill];                                        UIGraphicsPopContext();                }                                @end
View Code

      使用:

        
                @implementation ViewController                                - (void)viewDidLoad{                    [super viewDidLoad];                                         //1.建立自訂的layer                     DXLayer *layer=[DXLayer layer];                                         //2.設定layer的屬性                     layer.backgroundColor=[UIColor brownColor].CGColor;                                         layer.bounds=CGRectMake(0, 0, 200, 150);                     layer.anchorPoint=CGPointZero;                     layer.position=CGPointMake(100, 100);                                         layer.cornerRadius=20;                                         layer.shadowColor=[UIColor yellowColor].CGColor;                     layer.shadowOffset=CGSizeMake(5, 5);                     layer.shadowOpacity=0.6;                                    //3.觸發layer的 drawInContext: 方法 在自訂Layer上進行繪製                     [layer setNeedsDisplay];                                         //4.添加layer                     [self.view.layer addSublayer:layer];                 }                                @end                
View Code

    :

      

  2、使用Core Graphic

      
                #import "DXLayer.h"                                @implementation DXLayer                                //重寫該方法,在該方法內繪製圖形                -(void)drawInContext:(CGContextRef)ctx{                                         //1.繪製圖形                     //畫一個圓                     CGContextAddEllipseInRect(ctx, CGRectMake(50, 50, 100, 100));                                         //設定屬性(顏色)                     // [[UIColor yellowColor]set];                     CGContextSetRGBFillColor(ctx, 0, 0, 1, 1);                                     //2.渲染                     CGContextFillPath(ctx);                 }                @end
View Code

    :

      

-----------------------------------------------------------------------------------------------

                -------使用 Image Context----------

    1、通過 ImageContext 產生一個 UIImage對象

      2、代碼位置無限制  以上兩種方式都限制在 drawRect:  或  drawLayer: inContext: 方法中

 

  1、使用UIKit       

      
            @implementation ViewController                        - (void)viewDidLoad{                 [super viewDidLoad];                            UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 200, 100)];                imgView.image = [self createImageFromImageContext];                                [self.view addSubview:imgView];                             }                        /** 通過繪圖的方式 產生圖片對象 (畫個圈圈) */            - (UIImage *) createImageFromImageContext{                                /**                    建立圖形上下文                                         1: 所要建立的圖片的尺寸                                         2: 指定所產生圖片的背景是否為不透明                                         3: 指定產生圖片的縮放因子,與UIImage的scale屬性所指的含義是一致的。                                                 傳入0則表示讓圖片的縮放因子根據螢幕的解析度而變化                 */                UIGraphicsBeginImageContextWithOptions(CGSizeMake(200,100), NO, 0);                                // UIKit 進行繪圖                UIBezierPath* p = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0,0,200,100)];                                [[UIColor blueColor] setFill];                                [p fill];                                // 從上下文中擷取圖片對象                UIImage* img = UIGraphicsGetImageFromCurrentImageContext();                                // 關閉圖形上下文                UIGraphicsEndImageContext();                                return img;            }            @end
View Code

    :

      

  2、使用Core Graphic

      
            /** 通過繪圖的方式 產生圖片對象 (畫個圈圈) */            - (UIImage *) createImageFromImageContext{                                /**                    建立圖形上下文                                         1: 所要建立的圖片的尺寸                                         2: 指定所產生圖片的背景是否為不透明                                         3: 指定產生圖片的縮放因子,與UIImage的scale屬性所指的含義是一致的。                                                 傳入0則表示讓圖片的縮放因子根據螢幕的解析度而變化                 */                UIGraphicsBeginImageContextWithOptions(CGSizeMake(200,100), NO, 0);                                                   CGContextRef con = UIGraphicsGetCurrentContext();                                CGContextAddEllipseInRect(con, CGRectMake(0,0,200,100));                                CGContextSetFillColorWithColor(con, [UIColor blueColor].CGColor);                                CGContextFillPath(con);                                UIImage* img = UIGraphicsGetImageFromCurrentImageContext();                                UIGraphicsEndImageContext();                            return img;            }
View Code

    :

      

-----------------------------------------------------------------------------------------------

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.