2010-07-02 4 views
0

J'ai créé un UIScrollView (canvas.scrollview) et j'ai un UIView personnalisé (canvas) à l'intérieur.UIScrollView semble utiliser beaucoup de mémoire sur les gros ContentSizes

une configuration normale pour le démarrage est quelque chose comme ceci:

CGRect cs2 = CGRectMake (0, 0, 4000, 4000); Écran CGPoint = {[UIScreen mainScreen] .bounds.size.width, [UIScreen mainScreen] .bounds.size.height};

self.canvas.frame = cs2; //taille de la toile;

self.canvas.scrollView.contentSize = canvas_size.size; self.canvas.scrollView.contentOffset = CGPointMake (canvas_size.size.width/2-screen.x/2, canvas_size.size.height/2-screen.y/2);

Mais j'ai remarqué que lorsque je définis la taille du contenu scrollview à une plus grande valeur comme 4000,4000; il utilisera beaucoup plus de mémoire. Par exemple:

scrollview view real virtual 
1000,1000 1000,1000 6 88 
4000,4000 1000,1000 62 145 
1000,1000 4000,4000 6 88 

Je voudrais avoir une zone de travail assez large si possible, mais 8000x8000 foobars complètement la mémoire. Une idée de pourquoi le scrollview utiliserait tant de mémoire, et y a-t-il un moyen de résoudre ce problème?

+0

La propriété contentSize d'un UIScrollView n'affecte pas l'utilisation de la mémoire. – drawnonward

+0

Si cela est vrai, alors pourquoi ne change-t-il que lorsque je change le contentSize? –

Répondre

1

J'utilise d'énormes vues de défilement dans mon projet actuel (milliers par milliers de pixels) et cela ne se produit absolument pas pour moi. Je pense que votre UIView étant énorme pourrait être le problème, pas votre vue de défilement. Essayez de définir la taille de UIView sur 768x1024, puis en haut de la vue de défilement jusqu'à 4k x 4k et de voir si le problème disparaît. Si le UIView se trouve être une image (j'en doute, ou vous le mentionneriez probablement), vous devez savoir que iOS ne prend en charge que les images de taille 1024x1024, après quoi il y a un peu de "non défini". comportement "en termes d'utilisation de la mémoire. Vous avez probablement besoin de regarder dans CATiledLayer, bien qu'un simple UIView sans contenu ne devrait pas prendre autant de mémoire, peu importe sa taille, donc il pourrait y avoir un problème ailleurs dans votre projet.

1

Je ne pense pas que ce soit la vue de défilement qui utilise autant de mémoire, mais la sous-classe personnalisée UIView de toile. Si le format de canvas est vraiment 4000 x 4000, le système doit allouer suffisamment de mémoire pour contenir une image bitmap de 32 bits de cette taille, soit environ 64 Mo. Pour de telles vues, vous devez utiliser CATiledLayer pour du contenu statique ou un système de vue en mosaïque.

Questions connexes