2011-01-24 18 views
8

Chciałbym opracować aplikację, gdy użytkownik może rysować linie ... ale nie chcę rysować linii prostych, ale chcę pokazać linię, gdy użytkownicy ją rysują. Kiedy użytkownik przechodzi od punktu A do B, chciałbym wyprostować linię (jeśli użytkownicy tego chcą).Rysowanie linii na iPhonie/iPadzie

Aby móc to zrobić, chcę zmienić mój widok na siatkę zaczynając od 0,0 (u góry po lewej) i kończąc na 320,480 (dla iPhone) i 768,1024 (dla iPada) (u dołu po prawej).

Na to pytanie mam punkt A na 10,10 i punkt B na 100,100.

Moje pytanie:
- Jak utworzyć tę siatkę?
- Jak utworzyć te punkty?
- Jak narysować linię bez jej prostowania?
- Jak narysować prostą linię?

Mój problem polega na tym, że jestem zaznajomiony z tworzeniem "normalnych" aplikacji UI. Nie jestem zaznajomiony z Open-GL ect.

Mam nadzieję, że ktoś mi w tym pomoże.

poważaniem,
Paul Peelen

+0

Proponuję przełamać twój problem "prostowania" na osobne pytanie. – genpfault

+0

Ok, masz na myśli, że zaczynam od linii prostych jako krok 1, a później przechodzę do linii nieliniowych w kroku 2? –

+0

Oznaczono to jako 'opengl-es' - czy robisz z tym swój rysunek, czy z" natywnym "systemem rysowania, Quartz? –

Odpowiedz

17

podklasy swoją UIView i zastąpić metodę - (void)drawRect:(CGRect)rect.

Tam chwycić kontekst grafiki:

CGContextRef context = UIGraphicsGetCurrentContext(); 

A ty używać, aby uczynić rdzeń graficzny nazywa, jak:

CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextBeginPath (context); 
for (k = 0; k < count; k += 2) { 
    CGContextMoveToPoint(context, s[k].x, s[k].y); 
    CGContextAddLineToPoint(context, s[k+1].x, s[k+1].y); 
} 
CGContextStrokePath(context); 

Spójrz Programming Guide Quartz 2D dla wszystkich szczegółów.

+0

Wspaniale, popatrzę. –

+0

Zaczynam z tym samym ,, każdy przykład lub samouczek ... nie mogę dowiedzieć się, jak korzystać z tego kodu. Każda pomoc doceniona dzięki – Dave

+0

Ktoś pomoże mi w użyciu powyższego kodu? –

0

Można przeciągnąć linię prostą, gdy użytkownik przeciągnij go na podstawie początkowych i końcowych punkt narysować linię za pomocą UIBezierPath i CAShapeLayer:

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [[event allTouches] anyObject]; 
    startingPoint = [touch locationInView:baseHolderView]; 

} 
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [touches anyObject]; 
    endingPoint = [touch locationInView:baseHolderView]; 
    [self makeLineLayer:baseHolderView.layer lineFromPointA:startingPoint toPointB:endingPoint]; 
} 

-(void)makeLineLayer:(CALayer *)layer lineFromPointA:(CGPoint)pointA toPointB:(CGPoint)pointB 
{ 
    CAShapeLayer *line = [CAShapeLayer layer]; 
    UIBezierPath *linePath=[UIBezierPath bezierPath]; 
    [linePath moveToPoint: pointA]; 
    [linePath addLineToPoint:pointB]; 
    line.path=linePath.CGPath; 
    line.fillColor = nil; 
    line.opacity = 2.0; 
    line.strokeColor = [UIColor blackColor].CGColor; 
    [layer addSublayer:line]; 
} 

nadzieję, że pomoże osiągnąć swój cel.

Powiązane problemy