Search code examples
ioscore-animationcalayer

Why isn't this shape animating?


I'm stumped why this shape wont animate into the other path. I've tried demo CABasicAnimations which have worked.. if anyone has any idea that would be amazing!

#import "AKTabBar.h"

@implementation AKTabBar

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        //customize tab bar
    }
    return self;
}

-(void)awakeFromNib {
    CAShapeLayer* tabBarShape = [CAShapeLayer layer];


    UIBezierPath* discoverPath = [UIBezierPath bezierPath];
    [discoverPath moveToPoint: CGPointMake(0, 98)];
    [discoverPath addLineToPoint: CGPointMake(0, 98)];
    [discoverPath addLineToPoint: CGPointMake(0, -0)];
    [discoverPath addLineToPoint: CGPointMake(27.91, -0)];
    [discoverPath addLineToPoint: CGPointMake(34, 7)];
    [discoverPath addLineToPoint: CGPointMake(39.78, -0)];
    [discoverPath addLineToPoint: CGPointMake(320, -0)];
    [discoverPath addLineToPoint: CGPointMake(320, 98)];
    [discoverPath closePath];


    UIBezierPath* sharePath = [UIBezierPath bezierPath];
    [sharePath moveToPoint: CGPointMake(0, 98)];
    [sharePath addLineToPoint: CGPointMake(0, 98)];
    [sharePath addLineToPoint: CGPointMake(0, -0)];
    [sharePath addLineToPoint: CGPointMake(40, -0)];
    [sharePath addLineToPoint: CGPointMake(47, 7)];
    [sharePath addLineToPoint: CGPointMake(39.78, -0)];
    [sharePath addLineToPoint: CGPointMake(320, -0)];
    [sharePath addLineToPoint: CGPointMake(200, 98)];
    [sharePath closePath];

    tabBarShape.path=discoverPath.CGPath;
    tabBarShape.fillColor = [UIColor redColor].CGColor;

//    UIImageView* menu = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tabBarBackground"]];
    [self.layer addSublayer:tabBarShape];
//    menu.layer.mask=tabBarShape;
//  [ self addSubview:menu];


    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"discoverPath"];
    animation.duration = 4.0;
    animation.toValue = (__bridge id)(sharePath.CGPath);
    [tabBarShape addAnimation:animation forKey:@"discoverPath"];


}


@end

Solution

  • Your CABasicAnimation is trying to animate the property discoverPath on the CAShapeLayer. However, CAShapeLayer has no such property.

    What happens if you do this instead?

    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"path"];