Xamarin.ios의 핵심 그래픽Core Graphics in Xamarin.iOS

이 문서에서는 핵심 그래픽 iOS 프레임 워크에 대해 설명 합니다. 핵심 그래픽을 사용 하 여 기 하 도형, 이미지 및 Pdf를 그리는 방법을 보여 줍니다.This article discusses the Core Graphics iOS frameworks. It shows how to use Core Graphics to draw geometry, images and PDFs.

iOS에는 하위 수준의 그리기 지원 기능을 제공 하는 핵심 그래픽 프레임 워크가 포함 되어 있습니다.iOS includes the Core Graphics framework to provide low-level drawing support. 이러한 프레임 워크는 UIKit 내에서 풍부한 그래픽 기능을 사용 하도록 설정 합니다.These frameworks are what enable the rich graphical capabilities within UIKit.

핵심 그래픽은 장치 독립적인 그래픽의 그리기를 허용 하는 낮은 수준의 2D 그래픽 프레임 워크입니다.Core Graphics is a low-level 2D graphics framework that allows drawing device independent graphics. UIKit의 모든 2D 그리기는 내부적으로 핵심 그래픽을 사용 합니다.All 2D drawing in UIKit uses Core Graphics internally.

핵심 그래픽은 다음을 비롯 한 다양 한 시나리오에서 그리기를 지원 합니다.Core Graphics supports drawing in a number of scenarios including:

기 하 도형 공간Geometric Space

시나리오에 관계 없이 코어 그래픽을 사용 하 여 수행 되는 모든 그리기는 기하학적 공간에서 수행 됩니다. 즉, 픽셀이 아닌 추상 점에서 작동 합니다.Regardless of the scenario, all drawing done with Core Graphics is done in geometric space, meaning it works in abstract points rather than pixels. Geometry 및 그리기 상태 (예: 색, 선 스타일 등)와 그리기 상태를 사용 하 여 그릴 항목을 설명 하 고, 핵심 그래픽 핸들은 모든 항목을 픽셀로 변환 합니다.You describe what you want drawn in terms of geometry and drawing state such as colors, line styles, etc. and Core Graphics handles translating everything into pixels. 이러한 상태는 복사의 캔버스 처럼 생각할 수 있는 그래픽 컨텍스트에 추가 됩니다.Such state is added to a graphics context, which you can think of like a painter’s canvas.

이 방법에는 다음과 같은 몇 가지 이점이 있습니다.There are a few benefits to this approach:

  • 그리기 코드는 동적이 되며 이후에는 런타임에 그래픽을 수정할 수 있습니다.Drawing code becomes dynamic, and can subsequently modify graphics at runtime.
  • 응용 프로그램 번들에서 정적 이미지의 필요성을 줄이면 응용 프로그램 크기를 줄일 수 있습니다.Reducing the need for static images in the application bundle can reduce application size.
  • 그래픽은 장치에서 해상도를 변경 하는 데 더 탄력적으로 유지 됩니다.Graphics become more resilient to resolution changes across devices.

UIView 하위 클래스에서 그리기Drawing in a UIView Subclass

모든 UIViewDraw 그려야 할 때 시스템에 의해 호출 되는 메서드.Every UIView has a Draw method that is called by the system when it needs to be drawn. 뷰에 그리기 코드를 추가 하려면 하위 클래스 UIView 및 재정의: DrawTo add drawing code to a view, subclass UIView and override Draw:

public class TriangleView : UIView
{
    public override void Draw (CGRect rect)
    {
        base.Draw (rect);
    }
}

Draw는 직접 호출 하면 안 됩니다.Draw should never be called directly. 실행된 루프 처리 하는 동안 시스템에 의해 호출 됩니다.It is called by the system during run loop processing. 뷰는 뷰 계층 구조에 추가 된 후 실행된 루프를 통해 처음으로 해당 Draw 메서드가 호출 됩니다.The first time through the run loop after a view is added to the view hierarchy, its Draw method is called. 에 대 한 후속 호출 Draw 뷰를 호출 하 여 그려야 하는 것으로 표시 되어 표시 될 SetNeedsDisplay 또는 SetNeedsDisplayInRect 뷰.Subsequent calls to Draw occur when the view is marked as needing to be drawn by calling either SetNeedsDisplay or SetNeedsDisplayInRect on the view.

그래픽 코드 패턴Pattern for Graphics Code

Draw 구현에서 코드는 그리려는 항목을 설명 해야 합니다.The code in the Draw implementation should describe what it wants drawn. 그리기 코드는 그리기 상태를 설정 하 고 메서드를 호출 하 여 그리기를 요청 하는 패턴을 따릅니다.The drawing code follows a pattern in which it sets some drawing state and calls a method to request it be drawn. 이 패턴은 다음과 같이 일반화 될 수 있습니다.This pattern can be generalized as follows:

  1. 그래픽 컨텍스트를 가져옵니다.Get a graphics context.

  2. 그리기 특성을 설정 합니다.Set up drawing attributes.

  3. 그리기 기본 형식에서 일부 기 하 도형을 만듭니다.Create some geometry from drawing primitives.

  4. 그리기 또는 스트로크 메서드를 호출 합니다.Call a Draw or Stroke method.

기본 그리기 예제Basic Drawing Example

예를 들어 다음 코드 조각을 살펴보십시오.For example, consider the following code snippet:

//get graphics context
using (CGContext g = UIGraphics.GetCurrentContext ()) {
            
    //set up drawing attributes
    g.SetLineWidth (10);
    UIColor.Blue.SetFill ();
    UIColor.Red.SetStroke ();

    //create geometry
    var path = new CGPath ();

    path.AddLines (new CGPoint[]{
    new CGPoint (100, 200),
    new CGPoint (160, 100), 
    new CGPoint (220, 200)});

    path.CloseSubpath ();

    //add geometry to graphics context and draw it
    g.AddPath (path);       
    g.DrawPath (CGPathDrawingMode.FillStroke);
}

이 코드를 중단 해 보겠습니다.Let's break this code down:

using (CGContext g = UIGraphics.GetCurrentContext ()) {
...
}

이 줄에서는 먼저 그리기에 사용할 현재 그래픽 컨텍스트를 가져옵니다.With this line, it first gets the current graphics context to use for drawing. 그리기를 수행 하는 캔버스로 그래픽 컨텍스트를 생각할 수 있습니다. 스트로크 및 채우기 색과 같은 그리기에 대 한 모든 상태와 그릴 기 하 도형도 포함 합니다.You can think of a graphics context as the canvas that drawing happens on, containing all the state about the drawing, such as stroke and fill colors, as well as the geometry to draw.

g.SetLineWidth (10);
UIColor.Blue.SetFill ();
UIColor.Red.SetStroke ();

그래픽 컨텍스트를 가져온 후 코드는 위에 표시 된 대로 그릴 때 사용할 일부 특성을 설정 합니다.After getting a graphics context the code sets up some attributes to use when drawing, shown above. 이 경우 선 두께, 스트로크 및 채우기 색이 설정 됩니다.In this case the line width, stroke and fill colors are set. 그런 다음, 모든 후속 그리기는 그래픽 컨텍스트의 상태에서 유지 되므로 이러한 특성을 사용 합니다.Any subsequent drawing will then use these attributes because they are maintained in the graphics context's state.

기 하 도형을 만들려면 코드에서를 CGPath사용 합니다 .이를 통해 선 및 곡선에서 그래픽 경로를 설명할 수 있습니다.To create geometry the code uses a CGPath, which allows a graphics path to be described from lines and curves. 이 경우 경로는 점의 배열을 연결 하는 선을 추가 하 여 삼각형을 구성 합니다.In this case, the path adds lines connecting an array of points to make up a triangle. 아래에 표시 된 것 처럼 핵심 그래픽은 뷰 그리기에 좌표계를 사용 합니다. 여기서 원점은 왼쪽 위에 있고, 양수 x는 오른쪽으로, 양수 y는 아래로 이동 합니다.As displayed below Core Graphics uses a coordinate system for view drawing, where the origin is in the upper left, with positive x-direct to the right and the positive-y direction down:

var path = new CGPath ();

path.AddLines (new CGPoint[]{
new CGPoint (100, 200),
new CGPoint (160, 100), 
new CGPoint (220, 200)});

path.CloseSubpath ();

경로를 만든 후에는를 호출 AddPath 하 고 DrawPath 각각을 그릴 수 있도록 그래픽 컨텍스트에 추가 됩니다.Once the path is created, it's added to the graphics context so that calling AddPath and DrawPath respectively can draw it.

결과 뷰는 다음과 같습니다.The resulting view is shown below:

그라데이션 채우기 만들기Creating Gradient Fills

다양 한 형태의 드로잉이 제공 됩니다.Richer forms of drawing are also available. 예를 들어 코어 그래픽을 통해 그라데이션 채우기를 만들고 클리핑 패스를 적용할 수 있습니다.For example, Core Graphics allows creating gradient fills and applying clipping paths. 이전 예제의 경로 내부에 그라데이션 채우기를 그리려면 먼저 경로를 클리핑 경로로 설정 해야 합니다.To draw a gradient fill inside the path from the previous example, first the path needs to be set as the clipping path:

// add the path back to the graphics context so that it is the current path
g.AddPath (path);
// set the current path to be the clipping path
g.Clip ();

현재 경로를 클리핑 경로로 설정 하면 다음 코드와 같이 선형 그라데이션을 그리는 다음 코드와 같이 패스의 기 하 도형 내에서 이어지는 모든 그리기를 제한 합니다.Setting the current path as the clipping path constrains all subsequent drawing within the geometry of the path, such as the following code, which draws a linear gradient:

// the color space determines how Core Graphics interprets color information
    using (CGColorSpace rgb = CGColorSpace.CreateDeviceRGB()) {
        CGGradient gradient = new CGGradient (rgb, new CGColor[] {
        UIColor.Blue.CGColor,
        UIColor.Yellow.CGColor
    });

// draw a linear gradient
    g.DrawLinearGradient (
        gradient, 
        new CGPoint (path.BoundingBox.Left, path.BoundingBox.Top), 
        new CGPoint (path.BoundingBox.Right, path.BoundingBox.Bottom), 
        CGGradientDrawingOptions.DrawsBeforeStartLocation);
    }

이러한 변경 내용에 따라 다음과 같이 그라데이션 채우기가 생성 됩니다.These changes produce a gradient fill as shown below:

선 패턴 수정Modifying Line Patterns

선의 그리기 특성도 핵심 그래픽을 사용 하 여 수정할 수 있습니다.The drawing attributes of lines can also be modified with Core Graphics. 여기에는 다음 코드에 표시 된 대로 선 두께와 스트로크 색 뿐만 아니라 선 패턴 자체도 변경 됩니다.This includes changing the line width and stroke color, as well as the line pattern itself, as seen in the following code:

//use a dashed line
g.SetLineDash (0, new nfloat[] { 10, 4 * (nfloat)Math.PI });

그리기 작업을 수행 하기 전에이 코드를 추가 하면 아래와 같이 파선 사이에 4 개의 간격을 사용 하 여 대시 선이 10 단위 길이입니다.Adding this code before any drawing operations results in dashed strokes 10 units long, with 4 units of spacing between dashes, as shown below:

Xamarin.ios에서 Unified API를 사용 하는 경우 배열 형식은 이어야 nfloat하며, 수학. PI로 명시적으로 캐스팅 해야 합니다.Note that when using the Unified API in Xamarin.iOS, the array type needs to be an nfloat, and also needs to be explicitly cast to Math.PI.

이미지 및 텍스트 그리기Drawing Images and Text

핵심 그래픽은 뷰의 그래픽 컨텍스트에서 경로를 그리는 것 외에도 그리기 이미지 및 텍스트를 지원 합니다.In addition to drawing paths in a view's graphics context, Core Graphics also supports drawing images and text. 이미지를 그리려면를 만들어 CGImage DrawImage 호출에 전달 하면 됩니다.To draw an image, simply create a CGImage and pass it to a DrawImage call:

public override void Draw (CGRect rect)
{
    base.Draw (rect);

    using(CGContext g = UIGraphics.GetCurrentContext ()){
        g.DrawImage (rect, UIImage.FromFile ("MyImage.png").CGImage);
    }
}

그러나 아래와 같이 뒤집힌 이미지를 생성 합니다.However, this produces an image drawn upside down, as shown below:

이에 대 한 이유는 이미지 그리기에 대 한 핵심 그래픽 원점이 왼쪽 아래에 있고 뷰는 왼쪽 위에서의 원점입니다.The reason for this is Core Graphics origin for image drawing is in the lower left, while the view has its origin in the upper left. 따라서 이미지를 올바르게 표시 하려면 원본을 수정 해야 합니다 .이는 ctm ( 현재 변환 매트릭스 )를 수정 하 여 수행할 수 있습니다.Therefore, to display the image correctly, the origin needs to be modified, which can be accomplished by modifying the Current Transformation Matrix (CTM). CTM은 사용자 공간이라고도 하는 위치를 정의 합니다.The CTM defines where points live, also known as user space. Y 방향으로 CTM을 반전 하 고 음수 y 방향의 범위 ' 높이로 이동 하면 이미지가 대칭 이동 될 수 있습니다.Inverting the CTM in the y direction and shifting it by the bounds’ height in the negative y direction can flip the image.

그래픽 컨텍스트에는 CTM을 변환할 수 있는 도우미 메서드가 있습니다.The graphics context has helper methods to transform the CTM. 이 경우 ScaleCTM 아래와 같이 드로잉을 "대칭 이동 TranslateCTM " 하 고 왼쪽 위로 이동 합니다.In this case, ScaleCTM "flips" the drawing and TranslateCTM shifts it to the upper left, as shown below:

public override void Draw (CGRect rect)
{
    base.Draw (rect);
    
    using (CGContext g = UIGraphics.GetCurrentContext ()) {

        // scale and translate the CTM so the image appears upright
        g.ScaleCTM (1, -1);
        g.TranslateCTM (0, -Bounds.Height);
        g.DrawImage (rect, UIImage.FromFile ("MyImage.png").CGImage);
}   

그러면 결과 이미지가 수직으로 표시 됩니다.The resulting image is then displayed upright:

중요

그래픽 컨텍스트를 변경 하면 이후의 모든 그리기 작업에 적용 됩니다.Changes to the graphics context apply to all subsequent drawing operations. 따라서 CTM이 변환 되 면 추가 그리기에 영향을 줍니다.Therefore, when the CTM is transformed, it will affect any additional drawing. 예를 들어 CTM 변환 후 삼각형을 그린 경우 거꾸로 표시 됩니다.For example, if you drew the triangle after the CTM transformation, it would appear upside down.

이미지에 텍스트 추가Adding Text to the Image

경로 및 이미지를 사용 하는 것과 마찬가지로, 핵심 그래픽을 사용 하 여 텍스트를 그리는 경우 일부 그래픽 상태를 설정 하 고 그릴 메서드를 호출 하는 것과 동일한 기본 패턴이As with paths and images, drawing text with Core Graphics involves the same basic pattern of setting some graphics state and calling a method to draw. 텍스트의 경우 텍스트 ShowText를 표시 하는 메서드는입니다.In the case of text, the method to display text is ShowText. 이미지 그리기 예제에 추가 되 면 다음 코드는 핵심 그래픽을 사용 하 여 일부 텍스트를 그립니다.When added to the image drawing example, the following code draws some text using Core Graphics:

public override void Draw (RectangleF rect)
{
    base.Draw (rect);
    
    // image drawing code omitted for brevity ...

    // translate the CTM by the font size so it displays on screen
    float fontSize = 35f;
    g.TranslateCTM (0, fontSize);

    // set general-purpose graphics state
    g.SetLineWidth (1.0f);
    g.SetStrokeColor (UIColor.Yellow.CGColor);
    g.SetFillColor (UIColor.Red.CGColor);
    g.SetShadow (new CGSize (5, 5), 0, UIColor.Blue.CGColor);

    // set text specific graphics state
    g.SetTextDrawingMode (CGTextDrawingMode.FillStroke);
    g.SelectFont ("Helvetica", fontSize, CGTextEncoding.MacRoman);

    // show the text
    g.ShowText ("Hello Core Graphics");
}

여기에서 볼 수 있듯이 텍스트 그리기에 대 한 그래픽 상태 설정은 기 하 도형 그리기와 비슷합니다.As you can see, setting the graphics state for text drawing is similar to drawing geometry. 그러나 텍스트 그리기의 경우 텍스트 그리기 모드와 글꼴도 적용 됩니다.For text drawing however, the text drawing mode and the font are applied as well. 이 경우 그림자를 적용 해도 패스 그리기에 대해 그림자가 동일 하 게 적용 되지만 그림자도 적용 됩니다.In this case, a shadow is also applied, although applying shadows works the same for path drawing.

결과 텍스트는 아래와 같이 이미지가 표시 됩니다.The resulting text is displayed with the image as shown below:

메모리 지원 이미지Memory-Backed Images

핵심 그래픽은 뷰의 그래픽 컨텍스트로 그리는 것 외에도 화면에서 그리기 라고도 하는 메모리 지원 이미지 그리기를 지원 합니다.In addition to drawing to a view's graphics context, Core Graphics supports drawing memory backed images, also known as drawing off-screen. 이렇게 하려면 다음을 수행 해야 합니다.Doing so requires:

  • 메모리 내 비트맵에 의해 지원 되는 그래픽 컨텍스트 만들기Creating a graphics context that is backed by an in memory bitmap
  • 그리기 상태 설정 및 그리기 명령 실행Setting drawing state and issuing drawing commands
  • 컨텍스트에서 이미지 가져오기Getting the image from the context
  • 컨텍스트 제거Removing the context

뷰가에서 컨텍스트를 제공 하는 메서드와달리이경우다음두가지방법중하나로컨텍스트를만듭니다.DrawUnlike the Draw method, where the context is supplied by the view, in this case you create the context in one of two ways:

  1. (또는 UIGraphics.BeginImageContext BeginImageContextWithOptions)를 호출 하 여By calling UIGraphics.BeginImageContext (or BeginImageContextWithOptions)

  2. 새을 만들어CGBitmapContextInstanceBy creating a new CGBitmapContextInstance

CGBitmapContextInstance는 사용자 지정 이미지 조작 알고리즘을 사용 하는 경우와 같이 이미지 비트로 직접 작업 하는 경우에 유용 합니다.CGBitmapContextInstance is useful when you are working directly with the image bits, such as for cases where you are using a custom image manipulation algorithm. 다른 모든 경우에는 또는 BeginImageContext BeginImageContextWithOptions를 사용 해야 합니다.In all other cases, you should use BeginImageContext or BeginImageContextWithOptions.

이미지 컨텍스트가 있으면 그리기 코드를 추가 하는 것은 UIView 하위 클래스에 있는 것과 같습니다.Once you have an image context, adding drawing code is just like it is in a UIView subclass. 예를 들어 앞에서 삼각형을 그리기 위해 사용 된 코드 예제를 사용 하 여 아래와 같이를 사용 하는 대신 UIView메모리의 이미지를 그릴 수 있습니다.For example, the code example used earlier to draw a triangle can be used to draw to an image in memory instead of in a UIView, as shown below:

UIImage DrawTriangle ()
{
    UIImage triangleImage;

    //push a memory backed bitmap context on the context stack
    UIGraphics.BeginImageContext (new CGSize (200.0f, 200.0f));

    //get graphics context
    using(CGContext g = UIGraphics.GetCurrentContext ()){

        //set up drawing attributes
        g.SetLineWidth(4);
        UIColor.Purple.SetFill ();
        UIColor.Black.SetStroke ();

        //create geometry
        path = new CGPath ();

        path.AddLines(new CGPoint[]{
            new CGPoint(100,200),
            new CGPoint(160,100), 
            new CGPoint(220,200)});

        path.CloseSubpath();

        //add geometry to graphics context and draw it
        g.AddPath(path);
        g.DrawPath(CGPathDrawingMode.FillStroke);

        //get a UIImage from the context
        triangleImage = UIGraphics.GetImageFromCurrentImageContext ();
    }
    
    return triangleImage;
}

메모리 지원 비트맵에 그리는 일반적인 용도는에서 UIView이미지를 캡처하는 것입니다.A common use of drawing to a memory-backed bitmap is to capture an image from any UIView. 예를 들어 다음 코드는 보기의 계층을 비트맵 컨텍스트에 렌더링 하 고 해당 계층에서 UIImage 를 만듭니다.For example, the following code renders a view's layer to a bitmap context and creates a UIImage from it:

UIGraphics.BeginImageContext (cellView.Frame.Size);

//render the view's layer in the current context
anyView.Layer.RenderInContext (UIGraphics.GetCurrentContext ());

//get a UIImage from the context
UIImage anyViewImage = UIGraphics.GetImageFromCurrentImageContext ();
UIGraphics.EndImageContext ();

Pdf 그리기Drawing PDFs

이미지 외에도 핵심 그래픽은 PDF 그리기를 지원 합니다.In addition to images, Core Graphics supports PDF drawing. 이미지와 마찬가지로 메모리에 PDF를 렌더링 하 고에서 UIView렌더링을 위해 pdf를 읽을 수 있습니다.Like images, you can render a PDF in memory as well as read a PDF for rendering in a UIView.

UIView의 PDFPDF in a UIView

또한 핵심 그래픽은 파일에서 PDF를 읽고 클래스를 CGPDFDocument 사용 하 여 보기에서 PDF를 렌더링 하도록 지원 합니다.Core Graphics also supports reading a PDF from a file and rendering it in a view using the CGPDFDocument class. 클래스 CGPDFDocument 는 코드의 PDF를 나타내며 페이지를 읽고 그리는 데 사용할 수 있습니다.The CGPDFDocument class represents a PDF in code, and can be used to read and draw pages.

예를 들어 UIView 하위 클래스의 다음 코드는 파일 CGPDFDocument에서로 PDF를 읽습니다.For example, the following code in a UIView subclass reads a PDF from a file into a CGPDFDocument:

public class PDFView : UIView
{
    CGPDFDocument pdfDoc;

    public PDFView ()
    {
        //create a CGPDFDocument from file.pdf included in the main bundle
        pdfDoc = CGPDFDocument.FromFile ("file.pdf");
    }
  
     public override void Draw (Rectangle rect)
    {
        ...
    }
}

그런 Draw 다음 메서드는 아래와 CGPDFDocument 같이를 사용 CGPDFPage 하 여 페이지를 읽고를 호출 DrawPDFPage하 여 렌더링할 수 있습니다.The Draw method can then use the CGPDFDocument to read a page into CGPDFPage and render it by calling DrawPDFPage, as shown below:

public override void Draw (CGRect rect)
{
    base.Draw (rect);
        
    //flip the CTM so the PDF will be drawn upright
    using (CGContext g = UIGraphics.GetCurrentContext ()) {
        g.TranslateCTM (0, Bounds.Height);
        g.ScaleCTM (1, -1);
        
        // render the first page of the PDF
        using (CGPDFPage pdfPage = pdfDoc.GetPage (1)) {
            
        //get the affine transform that defines where the PDF is drawn
        CGAffineTransform t = pdfPage.GetDrawingTransform (CGPDFBox.Crop, rect, 0, true);
        
        //concatenate the pdf transform with the CTM for display in the view
        g.ConcatCTM (t);
        
        //draw the pdf page
        g.DrawPDFPage (pdfPage);
        }
    }
}

메모리 지원 PDFMemory-Backed PDF

메모리 내 PDF의 경우를 호출 BeginPDFContext하 여 pdf 컨텍스트를 만들어야 합니다.For an in-memory PDF, you need to create a PDF context by calling BeginPDFContext. PDF로 그리기는 페이지에 자세히 있습니다.Drawing to PDF is granular to pages. 각 페이지는를 호출 하 BeginPDFPage 고를 호출 하 EndPDFContent여 시작 되며,의 그래픽 코드와 함께를 호출 하 여 완료 됩니다.Each page is started by calling BeginPDFPage and completed by calling EndPDFContent, with the graphics code in between. 또한 이미지 드로잉과 마찬가지로 메모리 지원 PDF 그리기는 왼쪽 아래에 있는 원본을 사용 합니다 .이는 이미지와 마찬가지로 CTM을 수정 하 여 고려할 수 있습니다.Also, as with image drawing, memory backed PDF drawing uses an origin in the lower left, which can be accounted by modifying the CTM just like with images.

다음 코드는 PDF에 텍스트를 그리는 방법을 보여 줍니다.The following code shows how to draw text to a PDF:

//data buffer to hold the PDF
NSMutableData data = new NSMutableData ();

//create a PDF with empty rectangle, which will configure it for 8.5x11 inches
UIGraphics.BeginPDFContext (data, CGRect.Empty, null);

//start a PDF page
UIGraphics.BeginPDFPage ();
       
using (CGContext g = UIGraphics.GetCurrentContext ()) {
    g.ScaleCTM (1, -1);
    g.TranslateCTM (0, -25);      
    g.SelectFont ("Helvetica", 25, CGTextEncoding.MacRoman);
    g.ShowText ("Hello Core Graphics");
    }
    
//complete a PDF page
UIGraphics.EndPDFContent ();

결과 텍스트는 PDF에 그려지며,이는 저장 하 고, 업로드 하 NSData 고, 전자 메일로 보낼 수 있는에 포함 되어 있습니다.The resulting text is drawn to the PDF, which is then contained in an NSData that can be saved, uploaded, emailed, etc.

요약Summary

이 문서에서는 핵심 그래픽 프레임 워크를 통해 제공 되는 그래픽 기능을 살펴보았습니다.In this article we looked at the graphics capabilities provided via the Core Graphics framework. 핵심 그래픽을 사용 하 여 및 메모리 지원 그래픽 컨텍스트의 컨텍스트 UIView, 내에서 geometry, 이미지 및 pdf를 그리는 방법을 살펴보았습니다.We saw how to use Core Graphics to draw geometry, images and PDFs within the context of a UIView, as well as to memory-backed graphics contexts.