Macos 如何使用Facebook Pop动画从中心缩放NSView?

Macos 如何使用Facebook Pop动画从中心缩放NSView?,macos,core-animation,nsview,facebook-pop,Macos,Core Animation,Nsview,Facebook Pop,请注意,这是一个与Mac OS X(NSView)相关的问题 我正在尝试使用Facebook的流行动画从中心缩放NSView(到其大小的75%),然后再恢复到100%,但是我无法让它工作。鉴于kPOPLayerScaleXY似乎不起作用,我执行了以下操作,但结果不正确(因为它似乎从左上角向下缩放,当zoomIn为false时,它变大了: CGRect baseRect = CGRectMake(0, 0, 30, 24); CGFloat scale = (zoomIn) ? 0.75

请注意,这是一个与Mac OS X(
NSView
)相关的问题

我正在尝试使用Facebook的流行动画从中心缩放NSView(到其大小的75%),然后再恢复到100%,但是我无法让它工作。鉴于
kPOPLayerScaleXY
似乎不起作用,我执行了以下操作,但结果不正确(因为它似乎从左上角向下缩放,当
zoomIn
为false时,它变大了:

  CGRect baseRect = CGRectMake(0, 0, 30, 24);
  CGFloat scale = (zoomIn) ? 0.75 : 1.0;

  CGFloat x = baseRect.origin.x;
  CGFloat y = baseRect.origin.y;
  CGFloat width = baseRect.size.width;
  CGFloat height = baseRect.size.height;

  if (zoomIn) {
    width -= floorf((1.0 - scale) * width);
    height -= floorf((1.0 - scale) * height);

    x += floorf((width * (1.0f - scale)) / 2);
    y += floorf((height * (1.0f - scale)) / 2);
  }

  CGRect scaleRect = CGRectMake(x, y, width, height);

  [myView.layer pop_removeAllAnimations];

  POPSpringAnimation *animation = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerBounds];
  animation.springBounciness = 8;
  animation.toValue = [NSValue valueWithCGRect: scaleRect];
  [myView.layer pop_addAnimation:animation forKey:@"zoom"];

我最终通过使用两个动画实现了它:

  CGRect baseRect = CGRectMake(0, 0, 30, 24);
  CGFloat scale = (zoomIn) ? 0.80 : 1.0;

  CGFloat x = baseRect.origin.x;
  CGFloat y = baseRect.origin.y;

  if (zoomIn) {
    x = floorf((baseRect.size.width * (1.0 - scale)) / 2);
    y = floorf((baseRect.size.height * (1.0 - scale)) / 2);
  }

  [myView.layer pop_removeAllAnimations];

  POPSpringAnimation *animation = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerScaleXY];
  animation.springBounciness = 8;
  animation.toValue = [NSValue valueWithCGSize:CGSizeMake(scale, scale)];
  [myView.layer pop_addAnimation:animation forKey:@"zoom"];

  animation = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerTranslationXY];
  animation.springBounciness = 8;
  animation.toValue = [NSValue valueWithCGPoint:CGPointMake(x, y)];
  [myView.layer pop_addAnimation:animation forKey:@"translate"];

同样的问题。在设置层的
框架
锚点
后,所有工作都会正常进行。