2012-04-06 18 views
0

Die Aufgabe ist es, Pfade zur Laufzeit auf benutzerdefinierten Karten zu zeichnen, die ich in einer Scrollview verwende, und dann muss ich Pfade zur Laufzeit zeichnen, wann immer der Standort Koordinaten (lat, long) aktualisiert. Das Problem, was ich hier zu lösen versuche, ist, dass ich eine Klasse 'graphics' gemacht habe, die eine Unterklasse von UIView ist, in der ich die Zeichnung in der Methode 'drawrect:' code. Wenn ich also die Grafiken als Teilansicht des Scrollview über Bild hinzufüge, zeichnet die Linie, aber ich muss die Linie so zeichnen, als ob es Pfade wären. Ich muss die Zeilen zur Laufzeit zeichnen, muss die Punkte (x, y) der "CGContextStrokeLineSegments" -Methode aktualisieren. Der Code:Kerngrafiken, wie Linien zur Laufzeit zeichnen?

Viewcontroller:

- (void)loadView { 
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone]; 
CGRect fullScreenRect=[[UIScreen mainScreen] applicationFrame]; 
scrollView=[[UIScrollView alloc] initWithFrame:fullScreenRect]; 
graph = [[graphics alloc] initWithFrame:fullScreenRect]; 
scrollView.contentSize=CGSizeMake(320,480); 

UIImageView *tempImageView2 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"fortuneCenter.png"]]; 

self.view=scrollView; 
[scrollView addSubview:tempImageView2]; 
scrollView.userInteractionEnabled = YES; 
scrollView.bounces = NO; 
[scrollView addSubview:graph]; 
} 

Graphics.m:

- (id)initWithFrame:(CGRect)frame 
{ 
self = [super initWithFrame:frame]; 
if (self) { 
    // Initialization code 
    self.backgroundColor = [UIColor clearColor]; 
} 
return self; 
} 

- (void)drawRect:(CGRect)rect 
{ 
CGContextRef context = UIGraphicsGetCurrentContext(); 
CGPoint point [2] = { CGPointMake(160, 100), CGPointMake(160,300)}; 
CGContextSetRGBStrokeColor(context, 255, 0, 255, 1); 
CGContextStrokeLineSegments(context, point, 2); 
} 

So wie ich die Zeilen zur Laufzeit zurückgreifen. Ich simuliere gerade, also verwende ich nicht die Echtzeitdaten (Koordinaten). Ich möchte nur mit Dummy-Daten simulieren (Koordinaten von x, y). Nehmen wir an, eine Schaltfläche hat immer eine Taste. Wenn Sie die Taste drücken, werden die Koordinaten aktualisiert, sodass der Pfad erweitert wird.

Antwort

1

Der einfachste Weg wäre, eine Instanzvariable hinzuzufügen, die die Punkte der UIView Unterklasse darstellt. Dann, jedes Mal, wenn der Pfad sich ändert, aktualisieren Sie den ivar entsprechend und rufen Sie -setNeedsDisplay oder setNeedsDisplayInRect auf dem benutzerdefinierten UIView (oder sogar auf seiner superview). Die Laufzeitumgebung zeichnet dann den neuen Pfad neu.

1

Sie müssen nur CGPoint point[] dynamisch veränderbar machen, aus der Optik davon.

Sie können malloc verwenden, ein std::vector oder NSMutableData sogar die Punkte zu speichern, die Sie hinzufügen. Dann übergeben Sie dieses Array an CGContextStrokeLineSegments.

Wenn nur 2 Punkte benötigt werden, verschieben Sie CGPoint point[2] zu einem ivar, so dass Sie die Positionen speichern können, und dann (wie Rich notiert) die entsprechenden Werte ungültig machen, wenn diese Werte (oder das Array) geändert werden.