2010-12-15 5 views
0

Je développe une sorte de jeu de cartes dans lequel mes objets de vue (cartes, etc.) sont tous CALayers. Ces objets sont ajoutés en tant que sous-couches d'un mainBoard (un CALayer), qui, à son tour, est une sous-couche de la propriété [UIView layer] de mon mainView. Tout est OK, je peux faire des tests de hit pour vérifier quelle couche est touchée par le rappel touchesBegan:withEvent: de la classe mainView normalement, et ainsi de suite.UIScrollView à l'intérieur d'un CALayer

Cependant, je dois avoir un parchemin dans mon mainBoard pour montrer « plus gros » CALayers, alors j'ai essayé ajoutant d'abord le « plus grand » CALayer dans un CAScrollLayer, mais je remarque que la CAScrollLayer ne défile pas vraiment (n » t gérer l'entrée de l'utilisateur, ni dessiner les barres de défilement). Ainsi, la solution de contournement serait d'ajouter un UIScrollView directement à l'UIView mainView. Le UIScrollView défile parfaitement, jusqu'à ce que j'essaie d'ajouter le "plus grand" calque, en utilisant [scrollView.layer addSublayer:<bigger layer>].

Quelqu'un at-il une idée de la façon dont je peux avoir des objets "scrollable" à l'intérieur d'un CALayer?

Merci!

+1

ce qui se passe exactement lors de l'ajout de grandes couches au scrollview ?, De plus, je pense que l'ajout directement à scrollView.layer souscouche n'est pas une bonne idée, pourquoi ne pas les ajouter à une couche d'une vue contenue par votre scrollview? – nacho4d

+0

Pouvez-vous définir ce que sont les CALayers "plus gros"? Pouvez-vous décrire brièvement pourquoi les "plus gros" éléments doivent être CALayers? En lisant votre question, je me demande pourquoi vous ne restez pas simple et utilisez juste UIScrollView - il a tout ce que vous avez demandé, ce qui serait mieux de ne pas ré-implémenter. – Mark

+0

Toute mon application est constituée d'objets CALayers car je travaille au niveau de l'animation Core au lieu du niveau d'abstraction UIKit. Le problème est que Core Animation ne fournit pas de composant Scrollable, donc j'ai dû faire une solution de contournement en mélangeant des objets UIKit (UIScrollView) et des objets CoreAnimation (CALayers) et en les faisant fonctionner de façon transparente. Ce n'est pas un problème car UIKit n'est qu'un emballage pour CoreAnimation. Merci –

Répondre

0

nacho4d pointé la réponse à ma question. Répondre à mark: le "plus grand" calque (un calque dont les limites sont plus grandes que la surface disponible dans l'écran (et doit donc être contenu dans une zone déroulante)).

La solution a été d'abord envelopper le "plus grand" couche dans un UIView:

UIView *wrapperView = ... 
[wrapperView.layer addSublayer:<bigger_layer>]; 

après, je peux ajouter le point de vue en tant que sous-vue du UIScrollView:

[<uiscrollview> addSubview:wrapperView]; 

// set up scrolling properties 
<uiscrollview>.contentSize = <bigger_layer>.frame.size; 

Le problème était que j'essayais d'ajouter directement la couche "plus grande" en tant que sous-couche de l'UIScrollview, en l'enveloppant dans un UIView et en l'ajoutant comme une sous-vue travaillée.

Merci