1

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

我想实现这一点:

在此处输入图像描述

然后变成规模:

在此处输入图像描述

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

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

    } completion:^(BOOL finished) {

    }];

使用我当前的代码,比例从背景中心开始,因此箭头最终位于右侧(屏幕边界外)。

4

1 回答 1

1

尝试这样的事情:

- (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看起来像箭头中心的东西。

于 2015-10-28T09:23:10.140 回答