[SOLVED] Problem getting my layers to draw in the right order
[SOLVED] Problem getting my layers to draw in the right order
- Subject: [SOLVED] Problem getting my layers to draw in the right order
- From: Graham Cox <email@hidden>
- Date: Wed, 27 Jul 2011 00:13:38 +1000
OK, turns out that the zPosition property of the layers is important here. I was setting them to values like 100, and -100. That turns out to be way too small - the perspective/rotation transform I was applying to the 'behind' layers was swinging these layers into a zPosition that greatly exceeds these numbers. Changing to values like 1000 fixes the issue. It's a bit hard to get a feel for what these numbers mean - it must hugely depend on what sort of "camera field of view" (or whatever the right terminology is - focal length?) for the Core Animation 3D system.
Anyway, what I've learned is that the z values need to be big, and probably not terribly precise.
--Graham
On 26/07/2011, at 11:31 AM, Graham Cox wrote:
> Hi David,
>
>
> This sounds somewhat close to what I have already. My layer hierarchy is:
>
>
> Root
> |
> -------------------------
> | | |
> Rep1 Rep2 Rep3
> | | |
> -------- -------- |
> | | | | |
> L1 L2 R1 R2 Text
>
>
> Where L1, L2, R1 and R2 are custom CALayer subclasses that draw the coloured bars, and Rep 1..3 are the replicator layers that provide the reflective effect. (Sidenote: I'm pretty sure it's not possible to create the reflection effect I want using a single rep layer, as each one is set to a different perspective transform).
>
> The 3 replicator layers are siblings, where Rep3 which hosts the text is added last and should therefore draw last, i.e. on top. (I've tested this assumption by trying to move it elsewhere in the sublayers list using -insertSublayer:atIndex: but this doesn't appear to change anything.
>
> I also found that the text is not just being overwritten by the replicator layer's drawing - if I set its position to overlap the actual content (L1, R1, etc) it is also drawn over by the main content, so it does seem to simply be in the wrong place in the drawing order.
>
> One strange thing was that for a while, it started to work correctly, without me doing anything, then some cycles of dev and debugging later elsewhere in the code, reverted to this behaviour. The code I was working on was nothing to do with the graphical layers at all. This suggests that maybe there's something a bit random going on in establishing which layer gets to draw when.
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden