2013-08-14 8 views
7

मैं कैमरे के खुले होने पर दिखाई देने वाली ग्रिड लाइन को प्रदर्शित करना चाहता हूं। मैं AVCaptureManager का उपयोग कर रहा हूं। क्या मैं ग्रिड लाइनों को आकर्षित करने के लिए कोर ग्राफिक्स का उपयोग कर सकता हूं? आकार क्या है उन ग्रिड लाइनें?कैमरा खुला होने पर ग्रिड लाइनों को कैसे आकर्षित करें avcapturemanager

धन्यवाद

उत्तर

23

आप वास्तव में ग्रिड QuartzCore का उपयोग कर आकर्षित करने के लिए अपने कैमरे दृश्य पर ओवरले के रूप में एक कस्टम दृश्य जोड़ सकते हैं।

यही कारण है कि मैं यह कैसे मेरे ऐप Subvision में किया था:

enter image description here

कोड मैं इसे आकर्षित करने के लिए उपयोग करें (ध्यान दें: मेरी ग्रिड समायोज्य है, इसलिए यह 10x10 हो सकता है, 2x2 आदि):

:

// ------------------------------------------------------------------------------- 
// Used for drawing the grids ontop of the view port 
// ------------------------------------------------------------------------------- 
- (void)drawRect:(CGRect)rect 
{ 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSetLineWidth(context, 0.5); 
    CGContextSetStrokeColorWithColor(context, [UIColor whiteColor].CGColor); 

    // --------------------------- 
    // Drawing column lines 
    // --------------------------- 

    // calculate column width 
    CGFloat columnWidth = self.frame.size.width/(self.numberOfColumns + 1.0); 

    for(int i = 1; i <= self.numberOfColumns; i++) 
    { 
     CGPoint startPoint; 
     CGPoint endPoint; 

     startPoint.x = columnWidth * i; 
     startPoint.y = 0.0f; 

     endPoint.x = startPoint.x; 
     endPoint.y = self.frame.size.height; 

     CGContextMoveToPoint(context, startPoint.x, startPoint.y); 
     CGContextAddLineToPoint(context, endPoint.x, endPoint.y); 
     CGContextStrokePath(context); 
    } 

    // --------------------------- 
    // Drawing row lines 
    // --------------------------- 

    // calclulate row height 
    CGFloat rowHeight = self.frame.size.height/(self.numberOfRows + 1.0); 

    for(int j = 1; j <= self.numberOfRows; j++) 
    { 
     CGPoint startPoint; 
     CGPoint endPoint; 

     startPoint.x = 0.0f; 
     startPoint.y = rowHeight * j; 

     endPoint.x = self.frame.size.width; 
     endPoint.y = startPoint.y; 

     CGContextMoveToPoint(context, startPoint.x, startPoint.y); 
     CGContextAddLineToPoint(context, endPoint.x, endPoint.y); 
     CGContextStrokePath(context); 
    } 
} 

मेरे GridView वर्ग में, मैं 2 गुण numberOfRows और numberOfColumns परिभाषित किया है

ऐसा करने का मतलब है कि मैं इन दो मानों को संशोधित कर सकता हूं और असीमित समायोज्य ग्रिड उपखंड हैं।

+0

बहुत बढ़िया धन्यवाद, thats मैं – sin

+0

के लिए क्या देख रहा था मैं ओवरले कैसे जोड़ना होगा कि? यदि मैं ग्रिड व्यू नामक कक्षा में UIView को उप-वर्ग करता हूं और फिर इसे आज़माता हूं, तो drawRect को कभी भी कॉल नहीं किया जाता है। ग्रिड व्यू * ग्रिड व्यू = [[ग्रिड व्यू आवंट] init]; gridView.numberOfColumns = 10; gridView.numberOfRows = 10; [कैमरायूआई सेट कैमरे ओवरव्यू व्यू: ग्रिड व्यू]; –

+0

आपको [gridView setNeedsDisplay] को कॉल करने की आवश्यकता है; प्रत्येक बार जब आप संख्या OfRows या numberOfCols बदलते हैं। यह drawRect को कॉल करेगा: ग्रिड व्यू की विधि। – Zhang

1

एक UIImageView cameraOverlayView के लिए उपयोग करने के लिए बनाएँ।

UIImagePickerController और अपनी छवि को 'ग्रिड लाइन' के रूप में उपयोग करें। अपनी ग्रिड लाइन छवि फ़ाइल बनाते समय, पारदर्शी पृष्ठभूमि का उपयोग करना सुनिश्चित करें - अपारदर्शी सफेद नहीं।

UIImageView *overlayImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"overlay.png"]]; 

CGRect overlayRect = CGRectMake(0, 0, overlayImage.image.size.width, overlayImage.image.size.height); 

[overlayImage setFrame:overlayRect]; 

[yourImagePickerController setCameraOverlayView:overlayImage]; 
+0

मैं ImagePickerViewController – sin

+0

उपयोग नहीं कर रहा तो फिर तुम यह CoreGraphics या QuartZCore दोनों से .. .. आकर्षित कर सकते हैं अपनी आवश्यकताओं के अनुसार –

संबंधित मुद्दे