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:
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.
Ehrfürchtig danke, das ist, was ich für – sin
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]; –
Sie müssen das [gridView setNeedsDisplay] aufrufen; jedes Mal, wenn Sie die NumberOfRows oder NumberOfCols ändern. Dies ruft drawRect: Methode von gridView auf. – Zhang