масштабирование от определенной точки - PullRequest
0 голосов
/ 21 декабря 2010

Я использую этот код для увеличения от определенной точки

CGPoint getCenterPointForRect(CGRect inRect)
{
    CGRect screenRect = [[UIScreen mainScreen] bounds];
    return CGPointMake((screenRect.size.height-inRect.origin.x)/2,(screenRect.size.width-inRect.origin.y)/2);
}

-(void) startAnimation
{
    CGPoint centerPoint = getCenterPointForRect(self.view.frame);
    self.view.transform = CGAffineTransformMakeTranslation(centerPoint.x, centerPoint.y);
    self.view.transform = CGAffineTransformScale( self.view.transform , 0.001, 0.001);
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:kTransitionDuration];
    self.view.transform = CGAffineTransformIdentity;
    [UIView commitAnimations];
}

Это не работает. Как правильно сделать масштабирование от определенной точки.

1 Ответ

0 голосов
/ 23 декабря 2010

Я думаю, что, если я правильно диагностировал вашу проблему, вы получаете масштабируемую анимацию, когда представление начинается крошечным и в какой-то точке, затем масштабируется и перемещается в центр экрана точно так, как вы хотите, но точка, с которой начинается неверно?

Прежде всего, взгляды масштабируются вокруг их центра. Поэтому, если вы вынули перевод и, следовательно, сократили код, вы должны:

self.view.transform = CGAffineTransformMakeScale( 0.001, 0.001);

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

Предположим, что вместо этого вы хотите, чтобы оно росло и переместилось в центр экрана из (x, y), тогда вам нужно что-то более похожее на:

CGPoint locationToZoomFrom = ... populated by you somehow ...;
CGPoint vectorFromCentreToPoint = CGPointMake(
               locationToZoomFrom.x - self.view.center.x,
               locationToZoomFrom.y - self.view.center.y);

self.view.transform = CGAffineTransformMakeTranslation(vectorFromCentreToPoint.x, vectorFromCentreToPoint.y);
self.view.transform = CGAffineTransformScale( self.view.transform , 0.001, 0.001);

Где locationToZoomFrom будет начальным центром представления, а его нормальный центр в соответствии с его фреймом будет местом назначения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...