2010-11-27 14 views
0

J'utilise le code ci-dessous pour tracer le graphique dans une vue (dans la méthode drawRect):Dessin en arrête UIView travail si la largeur de vue devient supérieure à environ 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); 

Il fonctionne si la view.bounds.size.width est inférieure à environ 16600. Mais au-dessus de cette taille, l'intrigue cesse d'apparaître. Je redimensionne la vue en fonction de la plage des données à tracer.

+0

La vue de tracé est une sous-vue et il semble que la vue s'arrête lorsque la largeur devient supérieure à 16300 mais réapparaît si la taille devient inférieure à ce seuil. – jamihash

Répondre

0

C'est une très mauvaise idée de faire une telle grande largeur pour la vue, vous devez dessiner seulement ce que l'utilisateur peut voir en une fois (ou un peu plus) et utiliser la vue de taille normale. Pour contrôler où l'utilisateur est actuellement utiliser UIScrollView.

+0

Merci. Je suis d'accord que la taille de la vue ne devrait pas devenir si grande. La vue dans déjà dans un scrollview. – jamihash

0

Il est probablement préférable d'utiliser CAShapeLayers pour faire le dessin, car ils n'ont pas de pixels réels, juste un chemin que le matériel dessine. Alors vous pourriez avoir un UIScrollView qui a juste exposé des parties du CAShapeLayers pour le dessin, sinon vous faites une énorme image avec la vue aussi grande que vous l'avez actuellement.

+0

Merci. J'ai besoin de regarder ça. Mais je ne comprends pas pourquoi il se comporte différemment sur le changement de taille. – jamihash

+0

Parce qu'au-delà d'une certaine taille, il refuse probablement d'allouer autant de mémoire. Jetez également un coup d'oeil à https://github.com/neror/CA360 pour un exemple de toutes sortes d'utilisations de CALayer, y compris CAShapeLayer –