Масштабирование анимации в фоновом режиме из другого anchorPoint
Я сделал анимацию масштабирования для фонового изображения со стрелкой в нем, хорошо масштабируя изображение (оно включает в себя стрелку), означающее весь фон. он масштабируется от центра фона. но я хочу начать масштабирование от центра стрелки.
я хочу добиться этого:
Тогда стать со шкалой:
Что я должен изменить в своем коде:
self.blueBackground.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1, 1);
[UIView animateWithDuration:5 animations:^{
self.blueBackground.transform = CGAffineTransformScale(CGAffineTransformIdentity, 30, 30);
} completion:^(BOOL finished) {
}];
С моим текущим кодом шкала начинается с центра фона, поэтому стрелка заканчивается справа (за пределами экрана).
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
к чему-то, что выглядит как центр стрелки.