Search code examples
iphoneobjective-cioscore-animationcalayer

iOS Core Animation: CALayer bringSublayerToFront?


How do I bring a CALayer sublayer to the front of all sublayers, analogous to -[UIView bringSubviewToFront]?


Solution

  • I don't think such methods exist, but it's easy to roll your own.

    // CALayer+Additions.h
    
    @interface CALayer (Additions)
    - (void)bringSublayerToFront:(CALayer *)layer;
    - (void)sendSublayerToBack:(CALayer *)layer;
    @end
    
    // CALayer+Additions.m
    
    @implementation CALayer (Additions)
    
    - (void)bringSublayerToFront:(CALayer *)layer {
        CALayer *superlayer = self.superlayer;
        [self removeFromSuperlayer];
        [superlayer insertSublayer:gradientLayer atIndex:[self.sublayers count]-1];
    }
    
    - (void)sendSublayerToBack:(CALayer *)layer {
        CALayer *superlayer = self.superlayer;
        [self removeFromSuperlayer];
        [superlayer insertSublayer:gradientLayer atIndex:0];
    }