2009-12-11 1 views
6

Возможно ли это? Я могу изменить непрозрачность и положение (в центре) слоя, но всякий раз, когда я пытаюсь изменить размер или происхождение, он не работает.Изменение размера и перемещение UIView с активной анимацией (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]; 

ответ

10

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

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

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

+0

Удивительный, это именно то, что я искал. Благодаря! – ACBurk