È possibile aggiungere una vista personalizzata come sovrapposizione alla vista della telecamera per disegnare la griglia utilizzando QuartzCore.
Ecco come ho fatto nella mia app Subvision:

Il codice che uso per disegnare (nota: la mia griglia è regolabile in modo che sia in grado di essere 10x10, 2x2 ecc):
// -------------------------------------------------------------------------------
// 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);
}
}
Nella mia classe GridView, ho definito 2 proprietà numberOfRows e numberOfColumns:
#import <UIKit/UIKit.h>
@interface GridView : UIView
@property (nonatomic, assign) int numberOfColumns;
@property (nonatomic, assign) int numberOfRows;
@end
Ciò significa che è possibile modificare questi due valori e avere suddivisioni a griglia infinitamente regolabili.
impressionanti grazie, questo è quello che stavo cercando – sin
Come vorrei aggiungere che alla sovrapposizione? Se ho sottoclasse UIView in una classe chiamata GridView e poi provo, drawRect non viene mai chiamato. GridView * gridView = [[GridView alloc] init]; gridView.numberOfColumns = 10; gridView.numberOfRows = 10; [cameraUI setCameraOverlayView: gridView]; –
È necessario chiamare [gridView setNeedsDisplay]; ogni volta che modifichi numberOfRows o numberOfCols. Questo chiamerà drawRect: metodo di gridView. – Zhang