2013-08-14 12 views

Odpowiedz

23

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:

enter image description here

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.

+0

Firma Awesome dzięki, to jest to co ja szukałem – sin

+0

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

+0

Musisz wywołać [gridView setNeedsDisplay]; za każdym razem, gdy zmieniasz numberOfRows lub numberOfCols. Spowoduje to wywołanie metody drawRect: gridView. – Zhang

1

Utwórz UIImageView, aby użyć dla kameryOverlayView.

Użyj UIImagePickerController, a obraz jako "linie siatki". Podczas tworzenia pliku obrazu linii siatki należy używać przezroczystego tła - nieprzezroczystego białego.

UIImageView *overlayImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"overlay.png"]]; 

CGRect overlayRect = CGRectMake(0, 0, overlayImage.image.size.width, overlayImage.image.size.height); 

[overlayImage setFrame:overlayRect]; 

[yourImagePickerController setCameraOverlayView:overlayImage]; 
+0

nie używam ImagePickerViewController – sin

+0

Następnie można wyciągnąć go przez CoreGraphics LUB QuartzCore zarówno .. jak na swoje wymagania .. –

Powiązane problemy