2010-12-15 7 views
0

Ich entwickle eine Art Kartenspiel, bei dem meine Ansichtsobjekte (Karten usw.) alle CALayers sind. Diese Objekte werden als Sublayer eines mainBoard (ein CALayer) hinzugefügt, der seinerseits eine Unterschicht der [UIView layer] Eigenschaft meines mainView ist. Alles ist OK, ich kann Hit-Tests durchführen, um zu überprüfen, welche Schicht normalerweise durch den touchesBegan:withEvent: Callback der mainView Klasse berührt wird, und so weiter.UIScrollView in einem CALayer

Ich brauche aber in meinem mainBoard eine Rolle müssen „größeren“ CALayers zu zeigen, also versuchte ich zuerst Zugabe des „größeren“ CALayer in einem CAScrollLayer, aber ich bemerkte, dass die CAScrollLayer nicht wirklich bewegen (doesn‘ t Handle Benutzereingabe, keine Scrollbalken gezeichnet). Die Problemumgehung wäre also, ein UIScrollView direkt zu dem UIView mainView hinzuzufügen. Die UIScrollView scrollt perfekt, bis ich versuche, die "größere" Ebene hinzuzufügen, indem ich [scrollView.layer addSublayer:<bigger layer>] verwende.

Hat jemand eine Vorstellung davon, wie ich "scrollbare" Objekte in einem CALayer haben kann?

Danke!

+1

, was genau beim Hinzufügen von großen Schichten auf die Scroll passiert ?, Außerdem habe ich direkt an scrollView.layer Zugabe Unterschicht denken, ist keine gute Idee, warum man sie nicht auf eine Schicht aus einer Ansicht hinzufügen enthalten bei deinem Scrollview? – nacho4d

+0

Können Sie definieren, was die "größeren" CALayers sind? Kannst du kurz beschreiben, warum die "größeren" Gegenstände CALayers sein müssen? Wenn ich Ihre Frage lese, frage ich mich, warum Sie es nicht einfach halten und nur UIScrollView verwenden - es hat alles, wonach Sie gefragt haben, und das wäre besser, es nicht neu zu implementieren. – Mark

+0

Meine gesamte Anwendung besteht aus CALayers-Objekten, da ich in Core-Animationsebene statt UIKit-Abstraktionsebene arbeite. Das Problem ist, dass die Core Animation keine scrollbare Komponente zur Verfügung stellt, also musste ich eine Umgehung machen, indem ich UIKit Objekte (UIScrollView) und CoreAnimation Objekte (CALayers) mischte und sie nahtlos funktionierte. Dies ist kein Problem, da UIKit nur ein Wrapper für CoreAnimation ist. Vielen Dank –

Antwort

0

nacho4d zeigte die Antwort auf meine Frage. Antwort zu markieren: die "größere" Ebene (eine Ebene, deren Grenzen größer ist als der Bereich auf dem Bildschirm verfügbar (und so, muss in einem scrollbaren Bereich enthalten sein)).

Die Lösung bestand darin, zuerst die "größere" Schicht in einem UIView zu wickeln:

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

danach, ich die Ansicht als Subview des UIScrollView hinzufügen:

[<uiscrollview> addSubview:wrapperView]; 

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

Das Problem war, Ich habe versucht, die "größere" Ebene direkt als Unterlayer von UIScrollview hinzuzufügen, statt sie in eine UIView einzufügen und sie als Unteransicht hinzuzufügen.

Dank