2013-08-14 9 views

risposta

23

È 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:

enter image description here

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.

+0

impressionanti grazie, questo è quello che stavo cercando – sin

+0

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]; –

+0

È necessario chiamare [gridView setNeedsDisplay]; ogni volta che modifichi numberOfRows o numberOfCols. Questo chiamerà drawRect: metodo di gridView. – Zhang

1

Crea un'UIImageView da utilizzare per il cameraOverlayView.

Utilizzare UIImagePickerController e un'immagine come "linee della griglia". Quando crei il file immagine della griglia, assicurati di utilizzare uno sfondo trasparente, non bianco opaco.

+0

non sto usando ImagePickerViewController – sin

+0

Poi si può disegnare da CoreGraphics O QuartzCore sia .. secondo le vostre esigenze .. –

Problemi correlati