2013-08-14 4 views

Antwort

23

Sie können in der Tat eine benutzerdefinierte Ansicht als Überlagerung über Ihre Kameraansicht hinzufügen, um das Raster mit QuartzCore zu zeichnen.

Das ist, wie ich es in meiner app Subvision tat:

enter image description here

Der Code Ich benutze es zu zeichnen (Anmerkung: mein Raster einstellbar ist, so ist es 10x10 sein kann, 2x2 usw.):

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

In meiner Klasse Gridview habe ich 2 Eigenschaften numberOfRows und NumberOfColumns definiert:

#import <UIKit/UIKit.h> 

@interface GridView : UIView 

@property (nonatomic, assign) int numberOfColumns; 
@property (nonatomic, assign) int numberOfRows; 

@end 

Das bedeutet, dass ich diese beiden Werte modifizieren kann und unendlich einstellbare Rasterunterteilungen haben kann.

+0

Ehrfürchtig danke, das ist, was ich für – sin

+0

suchte Wie würde ich hinzufügen, dass auf dem Overlay? Wenn ich UIView von einer Klasse namens GridView unterlasse und dann versuche, wird drawRect nicht aufgerufen. GridView * GridView = [[GridView Alloc] Init]; gridView.numberOfColumns = 10; gridView.numberOfRows = 10; [cameraUI setCameraOverlayView: gridView]; –

+0

Sie müssen das [gridView setNeedsDisplay] aufrufen; jedes Mal, wenn Sie die NumberOfRows oder NumberOfCols ändern. Dies ruft drawRect: Methode von gridView auf. – Zhang

1

erstellen UIImageView für die cameraOverlayView zu verwenden.

Verwenden Sie UIImagePickerController und ein Bild als Ihre "Rasterlinien". Achten Sie bei der Erstellung Ihrer Gitterlinien-Bilddatei darauf, einen transparenten Hintergrund zu verwenden - nicht deckend weiß.

+0

ich mit ImagePickerViewController bin nicht – sin

+0

Dann können Sie es von Core Graphics OR Quartz zeichnen beide .. nach Ihren Wünschen .. –

Verwandte Themen