2010-11-27 3 views
0

Ich verwende folgenden Code in einer Ansicht plotten Diagramm (im drawRect-Methode):Zeichnung in UIView nicht mehr funktioniert, wenn Ansicht Breite als etwa größer wird 16600

CGContextBeginPath(context); 
CGContextMoveToPoint(context, devicePoint.x, devicePoint.y); 

for (index = 1; index < dataCount; index++) { 
    devicePoint = [[deviceDataArray objectAtIndex:index] CGPointValue]; 
    CGContextAddLineToPoint(context, devicePoint.x, devicePoint.y); 
} 

CGContextSetLineJoin(context, kCGLineJoinRound); 
CGContextStrokePath(context); 

Es funktioniert, wenn die view.bounds.size.width weniger als etwa 16600. Aber oberhalb dieser Größe hört die Handlung auf zu erscheinen.

Ich ändere die Ansicht abhängig von dem Bereich der Daten, die geplottet werden sollen.

+0

Die Plot-Ansicht ist eine Unteransicht und es scheint, dass die Ansicht stoppt, wenn die Breite größer als 16300 wird, aber wieder angezeigt wird, wenn die Größe kleiner als dieser Schwellenwert wird. – jamihash

Antwort

0

Dies ist sehr schlechte Idee, so große Breite für die Ansicht zu machen, müssen Sie nur zeichnen, was Benutzer in einer Zeit (oder ein wenig mehr) sehen können und verwenden Sie die Ansicht der normalen (Bildschirm) Größe dafür. Zur Kontrolle, wo der Benutzer gerade ist, wird UIScrollView verwendet.

+0

Danke. Ich stimme zu, die Größe der Ansicht sollte nicht so groß werden. Die Ansicht ist bereits in einer Scrollansicht. – jamihash

0

Sie sind wahrscheinlich besser dran mit CAShapeLayers, um die Zeichnung zu tun, da sie keine tatsächlichen Pixel haben, nur einen Pfad, den die Hardware zeichnet. Dann könntest du ein UIScrollView haben, das nur Teile der CAShapeLayers zum Zeichnen freigibt, sonst machst du ein riesiges Bild mit der Ansicht so groß wie du es gerade hast.

+0

Danke. Ich muss darüber nachdenken. Aber ich verstehe nicht, warum es sich bei Größenänderungen anders verhält. – jamihash

+0

Weil es ab einer bestimmten Größe wahrscheinlich nicht mehr so ​​viel Speicher zur Verfügung stellt. Sehen Sie auch https://github.com/neror/CA360 für ein Beispiel für alle Arten von Anwendungen von CALayer, einschließlich CAShapeLayer –

Verwandte Themen