2013-03-19 4 views
4

Я анимирую вид с поддержкой слоя, который содержит несколько подзонов. Все выложено с помощью автоматической компоновки. В настоящее время, как я живой взгляд, подвиды не масштабируется вместе с ним:Масштабирование содержимого слоя при анимационном образе с поддержкой слоя

animation

Я хотел бы все это быть обращено один раз, при их окончательного размера, затем масштабируется, как это воодушевляет. Свойства layerContentsPlacement и layerContentsRedrawPolicy кажутся тем, что я ищу, но их изменение не оказывает никакого влияния.

Вот основной прогоне того, как я делаю анимацию:

// Add itemView to canvas 
NSView *itemView = // ... 
itemView.layerContentsPlacement = NSViewLayerContentsPlacementScaleProportionallyToFit; 
itemView.layerContentsRedrawPolicy = NSViewLayerContentsRedrawBeforeViewResize; 
[parentView addSubview:itemView]; 

// Add constraints for the final itemView frame ... 

// Layout at final state 
[parentView layoutSubtreeIfNeeded]; 

// Set initial animation state 
itemView.alphaValue = 0.0f; 
itemView.frame = // centered zero'ed frame 

// Set final animation state 
[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) { 
    context.duration = 0.25f; 
    context.allowsImplicitAnimation = YES; 

    itemView.alphaValue = 1.0f; 
    [parentView layoutSubtreeIfNeeded]; 
} completionHandler:nil]; 
+2

Короткий ответ: не изменяйте размер изображения как анимацию. Уменьшите его с помощью преобразования. –

ответ

4

Благодаря комментарий Давида я перешел на использование преобразования на уровне представления.

Основная идея заключается в создании и компоновке вашего представления, как обычно, а затем создайте и добавьте некоторые анимации CA на уровень представления.

// Add item view to canvas 
NSView *itemView = // ... 
[parentView addSubview:itemView]; 

// Add constraints for the final item view positioning 

// Layout at final state 
[parentView layoutSubtreeIfNeeded]; 

// Animate 
CABasicAnimation *animation = [CABasicAnimation animation]; 
CATransform3D transform = CATransform3DMakeScale(0.5f, 0.5f, 0.5f); 
animation.fromValue = [NSValue valueWithCATransform3D:transform]; 
animation.duration = 1.0f; 
[itemView.layer addAnimation:animation forKey:@"transform"]; 

// create any other animations... 
Смежные вопросы