2014-10-02 18 views
6

PaintCode kullanıyorum ve metin yerleştirilmiş bir şekil oluşturmak için bazı kodlar oluşturdu. Bir dizeyi ayrıştırmak ve kamera rulosuna kaydedebileceğim veya FB üzerinde paylaşabileceğim bir UIImage oluşturmak için kodu kullanmak istiyorum ancak UIImage'ı oluşturmak için uğraşıyorum. Herhangi bir yardım harika olurdu!Amaç C - Bu PaintCode kodundan UIImage oluştur

- (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]; 
} 
+0

kullanılarak r boya kodu Versiyonu – harshitgupta

+0

PaintCode v2 – mwiggs

+0

var, sonra bunu yapabileceğime inanıyorum. Aynı zamanda, görüntüyü CGRect için kod vermekten ayrı tutmak için fonksiyonlar sağlar. https://www.youtube.com/watch?v=QLoJrgVg8Ok#t=375 adresindeki resim yöntemlerini ve değişkenlerini kullanarak bu eğiticiye başvurun. – harshitgupta

cevap

7

bu çizim kodunun tamamı o UIKit tarafından oluşturulan ve yönetilen bir grafik bağlamında çalışan beklentisiyle altında oluşturulur: Burada

kodudur.

Bu, bir UIView's drawRect yönteminde otomatik olarak geçerlidir. Ancak bir UIImage oluşturmak istiyorsunuz, bunun için sadece geçici bir grafik bağlamı kurmanız gerekiyor. aşağıdaki gibi

genel bir yaklaşımdır: Pratik UIKit çizim üzerinde

// 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(); 

Erica Sadun'ın kitabı muhtemelen bu tür bir şey için en tek durak kaynaktır. Swift eşdeğer

(dil versiyonu 1.2): u

// 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() 
+0

Bunu açıkladığınız için teşekkür ederiz. İyi çalışıyor! – mwiggs

+0

Teşekkürler bu harika. PaintCode gerçekten tak ve çalıştır değildir. – n13

+0

PaintCode, CoreGraphics'i öğrenmek veya CoreGraphics ile işinizi hızlandırmak için çok yararlı bir araç olduğunu söyleyebilirim, ancak CoreGraphics'i anlamak için bir alternatif olabileceğini hayal etmek zor. – algal