Rzeczywiście można dodać niestandardowy widok jako nakładkę w widoku z kamery, aby narysować siatkę przy użyciu QuartzCore.
To jak to zrobiłem w moim app Subvision:
Kod używam do rysowania (uwaga: moja siatka jest regulowana tak, że to może być 10x10, 2x2 itd):
// -------------------------------------------------------------------------------
// 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);
}
}
w mojej klasie GridView, mam zdefiniowane 2 nieruchomości numberOfRows i numberOfColumns:
#import <UIKit/UIKit.h>
@interface GridView : UIView
@property (nonatomic, assign) int numberOfColumns;
@property (nonatomic, assign) int numberOfRows;
@end
Dzięki temu mogę zmodyfikować te dwie wartości i mieć nieskończenie regulowane podziały siatki.
Firma Awesome dzięki, to jest to co ja szukałem – sin
Jak Dodam, że do nakładki? Jeśli podklasę UIView klasy o nazwie GridView, a następnie spróbuj tego, drawRect nigdy nie zostanie wywołany. GridView * gridView = [[Przypisanie GridView] init]; gridView.numberOfColumns = 10; gridView.numberOfRows = 10; [cameraUI setCameraOverlayView: gridView]; –
Musisz wywołać [gridView setNeedsDisplay]; za każdym razem, gdy zmieniasz numberOfRows lub numberOfCols. Spowoduje to wywołanie metody drawRect: gridView. – Zhang