Изменение размера и перемещение UIView с помощью Core Animation (CAKeyFrameAnimation)

Это возможно? Я могу изменить непрозрачность и положение (центр) слоя, но всякий раз, когда я пытаюсь изменить размер или начало координат, это не работает.

    CAAnimationGroup* anigroup = [CAAnimationGroup new];

    CGMutablePathRef thePath = CGPathCreateMutable();
    CGPathAddRect(thePath, NULL, CGRectMake(0,0, 320, 480));
    CGPathAddRect(thePath, NULL, CGRectMake(location.x - 16,location.y-24, 32, 48));
    CGPathAddRect(thePath, NULL, CGRectMake(190, 20, 32, 48));


    CAKeyframeAnimation* AniLoc = [CAKeyframeAnimation animationWithKeyPath:@"frame"];
    AniLoc.path = thePath;
    AniLoc.keyTimes= [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0f],
                                             [NSNumber numberWithFloat:0.3f],
                                             [NSNumber numberWithFloat:1.0f],nil];
    AniLoc.duration = 5;

    CFRelease(thePath);

    anigroup.animations = [NSArray arrayWithObjects:AniLoc,nil];
    anigroup.duration = 5;

    [focusview.layer addAnimation:anigroup forKey:nil];

person ACBurk    schedule 11.12.2009    source источник


Ответы (1)


Вы можете изменить размер и положение вида или слоя в анимации, но вы захотите сделать это как группу анимации, а не путем создания пути из серии прямоугольников.

В моем ответе здесь. Это работает с использованием CAKeyframeAnimation для изогнутого пути, по которому следует представление (только анимация его положения), а затем с помощью базовой анимации для настройки размера границ представления. Вы также можете использовать там CAKeyframeAnimation с несколькими CGSize для каждого ключевого кадра размера, который вам нужен, не забудьте обернуть их в NSValue, прежде чем помещать их в NSArray ключевых кадров.

Чтобы анимировать два свойства одновременно, я оборачиваю две анимации в CAAnimationGroup и применяю их к слою представления.

person Brad Larson    schedule 11.12.2009
comment
Круто, это именно то, что я искал. Спасибо! - person ACBurk; 11.12.2009