ios - 从另一个 anchor 在背景中缩放动画

标签 ios objective-c animation cgaffinetransformscale

我为背景图像制作了一个带有箭头的缩放动画,通过缩放图像(它包括箭头)意味着它是一个完整的背景。它从背景的中心开始缩放。但我想从箭头的中心开始缩放。

我想实现这个:

enter image description here

然后变成有比例的:

enter image description here

我必须在我的代码中更改什么:

    self.blueBackground.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1, 1);
    [UIView animateWithDuration:5 animations:^{
        self.blueBackground.transform = CGAffineTransformScale(CGAffineTransformIdentity, 30, 30);

    } completion:^(BOOL finished) {

    }];

在我当前的代码中,比例尺从背景中心开始,因此箭头在右侧结束(超出屏幕边界)。

最佳答案

尝试这样的事情:

- (void)animateArrow
{
  self.blueBackground.transform = CGAffineTransformIdentity;
  [UIView animateWithDuration:5 animations:^{
    ScaleViewAboutPointInBounds(self.blueBackground, arrowCenter, 30);
  } completion:^(BOOL finished) {
  }];
}

static void ScaleViewAboutPointInBounds(UIView *view, CGPoint point, CGFloat scaleAmount)
{
  CGFloat xAnchor = view.layer.anchorPoint.x * CGRectGetWidth(view.bounds);
  CGFloat yAnchor = view.layer.anchorPoint.y * CGRectGetHeight(view.bounds);

  CGFloat xOffset = point.x - xAnchor;
  CGFloat yOffset = point.y - yAnchor;

  CGAffineTransform shift = CGAffineTransformMakeTranslation(-xOffset, -yOffset);
  CGAffineTransform unshift = CGAffineTransformMakeTranslation(xOffset, yOffset);
  CGAffineTransform scale = CGAffineTransformMakeScale(scaleAmount, scaleAmount);

  view.transform = CGAffineTransformConcat(shift, CGAffineTransformConcat(scale, unshift));
}

它可能比您需要的更通用,您可以做得更简单,但这也应该有效。只需将 point 更改为看起来像箭头中心的东西即可。

关于ios - 从另一个 anchor 在背景中缩放动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33385915/

相关文章:

javascript - 将缓动纳入基于时间的移动

ios - iOS 中两个位置之间的估计时间

ios - 如果一个变异函数设置它自己等于另一个函数,这意味着什么

ios - 与 Storyboard merge 问题

ios - 使用 iphone sdk 在应用内购买货币交易

ios - 使用单个数组内容在 3 个 UIButton 中随机显示图像

objective-c - 为什么应用程序窗口只打开一次然后就打不开了?

javascript - 动画运行一次的链接点击次数

javascript - JavaScript 中本地定义的样式和动画

ios - 我如何获得 iDynamo 5 基本派生 key (BDK)?