sketch plugin paintcode ios objective-c uiimage cgrect

ios - plugin - Objetivo C: Crear UIImage desde este código de PaintCode



paintcode sketch plugin (1)

Todo este código de dibujo se genera bajo la expectativa de que se ejecutará dentro de un contexto de gráficos creado y administrado por UIKit.

Esto es automáticamente el caso dentro del método drawRect de UIView. Pero desea generar un UIImage, por lo que debe configurar un contexto de gráficos temporal solo para eso.

El enfoque general es el siguiente:

// specify size of the image CGRect imageRect = CGRectMake(0,0,100,100); // create the graphics context UIGraphicsBeginImageContextWithOptions(imageRect.size,NO,0.0); // insert calls to your drawing code here, to draw into the context // ... // save the image from the implicit context into an image UIImage * finalImage = UIGraphicsGetImageFromCurrentImageContext(); // cleanup UIGraphicsEndImageContext();

El libro de Erica Sadun sobre el dibujo práctico de UIKit es probablemente el mejor recurso integral para este tipo de cosas.

Equivalente en Swift (versión de lenguaje 1.2):

// specify size of the image let imageRect:CGRect = CGRectMake(0,0,100,100) // create the graphics context UIGraphicsBeginImageContextWithOptions(imageRect.size, false, 0) // insert calls to your drawing code here, to draw into the context // ... // save the image from the implicit context into an image let finalImage = UIGraphicsGetImageFromCurrentImageContext() // cleanup UIGraphicsEndImageContext()

Estoy usando PaintCode y ha generado código para crear una forma con texto superpuesto. Quiero usar el código para analizar una cadena y generar un UIImage que puedo guardar en el rollo de la cámara o compartir en FB, pero estoy luchando por generar el UIImage. ¡Cualquier ayuda sería genial!

Aquí está el código:

- (void)drawShareImageWithText: (NSString*)text; { //// Color Declarations UIColor* questionText = [UIColor colorWithRed: 1 green: 1 blue: 1 alpha: 1]; //// Bezier Drawing UIBezierPath* bezierPath = UIBezierPath.bezierPath; [bezierPath moveToPoint: CGPointMake(42.46, 0.09)]; [bezierPath addCurveToPoint: CGPointMake(53.37, 11) controlPoint1: CGPointMake(42.46, 0.09) controlPoint2: CGPointMake(47.66, 5.3)]; [bezierPath addLineToPoint: CGPointMake(255.6, 11)]; [bezierPath addCurveToPoint: CGPointMake(267.62, 11.92) controlPoint1: CGPointMake(261.76, 11) controlPoint2: CGPointMake(264.84, 11)]; [bezierPath addLineToPoint: CGPointMake(268.16, 12.05)]; [bezierPath addCurveToPoint: CGPointMake(275.95, 19.84) controlPoint1: CGPointMake(271.78, 13.37) controlPoint2: CGPointMake(274.63, 16.22)]; [bezierPath addCurveToPoint: CGPointMake(277, 32.4) controlPoint1: CGPointMake(277, 23.16) controlPoint2: CGPointMake(277, 26.24)]; [bezierPath addLineToPoint: CGPointMake(277, 148.6)]; [bezierPath addCurveToPoint: CGPointMake(276.08, 160.62) controlPoint1: CGPointMake(277, 154.76) controlPoint2: CGPointMake(277, 157.84)]; [bezierPath addLineToPoint: CGPointMake(275.95, 161.16)]; [bezierPath addCurveToPoint: CGPointMake(268.16, 168.95) controlPoint1: CGPointMake(274.63, 164.78) controlPoint2: CGPointMake(271.78, 167.63)]; [bezierPath addCurveToPoint: CGPointMake(255.6, 170) controlPoint1: CGPointMake(264.84, 170) controlPoint2: CGPointMake(261.76, 170)]; [bezierPath addLineToPoint: CGPointMake(21.4, 170)]; [bezierPath addCurveToPoint: CGPointMake(9.38, 169.08) controlPoint1: CGPointMake(15.24, 170) controlPoint2: CGPointMake(12.16, 170)]; [bezierPath addLineToPoint: CGPointMake(8.84, 168.95)]; [bezierPath addCurveToPoint: CGPointMake(1.05, 161.16) controlPoint1: CGPointMake(5.22, 167.63) controlPoint2: CGPointMake(2.37, 164.78)]; [bezierPath addCurveToPoint: CGPointMake(0, 148.6) controlPoint1: CGPointMake(0, 157.84) controlPoint2: CGPointMake(0, 154.76)]; [bezierPath addLineToPoint: CGPointMake(0, 32.4)]; [bezierPath addCurveToPoint: CGPointMake(0.92, 20.38) controlPoint1: CGPointMake(0, 26.24) controlPoint2: CGPointMake(0, 23.16)]; [bezierPath addLineToPoint: CGPointMake(1.05, 19.84)]; [bezierPath addCurveToPoint: CGPointMake(8.84, 12.05) controlPoint1: CGPointMake(2.37, 16.22) controlPoint2: CGPointMake(5.22, 13.37)]; [bezierPath addCurveToPoint: CGPointMake(21.4, 11) controlPoint1: CGPointMake(12.16, 11) controlPoint2: CGPointMake(15.24, 11)]; [bezierPath addLineToPoint: CGPointMake(31.54, 11)]; [bezierPath addCurveToPoint: CGPointMake(42.46, 0.09) controlPoint1: CGPointMake(37.25, 5.3) controlPoint2: CGPointMake(42.46, 0.09)]; [bezierPath closePath]; [StyleKit.Color1 setFill]; [bezierPath fill]; //// shareContent Drawing CGRect shareContentRect = CGRectMake(15, 26, 247, 136.03); NSMutableParagraphStyle* shareContentStyle = NSMutableParagraphStyle.defaultParagraphStyle.mutableCopy; shareContentStyle.alignment = NSTextAlignmentCenter; NSDictionary* shareContentFontAttributes = @{NSFontAttributeName: [UIFont fontWithName: @"Helvetica" size: 15], NSForegroundColorAttributeName: questionText, NSParagraphStyleAttributeName: shareContentStyle}; [text drawInRect: CGRectOffset(shareContentRect, 0, (CGRectGetHeight(shareContentRect) - [text boundingRectWithSize: shareContentRect.size options: NSStringDrawingUsesLineFragmentOrigin attributes: shareContentFontAttributes context: nil].size.height) / 2) withAttributes: shareContentFontAttributes]; }