Как получить происхождение и размер кадра UIView во время анимации - PullRequest
9 голосов
/ 12 декабря 2010

У меня есть анимация UIView

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:25]; 
myview.frame = CGRectMake(218, 216, myview.frame.size.width * 0.5, myview.frame.size.height * 0.5);
[UIView commitAnimations];

и NSTimer с методом обратного вызова.Вопрос: возможно ли получить текущий размер и происхождение myview.frame внутри метода обратного вызова таймера?
или может быть есть другой способ отследить его?

Ответы [ 3 ]

12 голосов
/ 13 декабря 2010

Я почти уверен, что это невозможно, потому что когда вы изменяете frame вашего взгляда, он вступает в силу немедленно. На заднем плане Core Animation заботится о анимации. Таким образом, даже если бы вы могли взять кадр, он дал бы вам окончательные координаты, а не текущие координаты в разгар анимации.

Доступ к уровню представления свойства, как указано NWCoder в комментариях. См. документацию .

[view.layer.presentationLayer frame]
2 голосов
/ 26 февраля 2012

NWCoder прав. Я приведу пример на C #, так как я пишу код в MonoTouch.

   RectangleF start = new RectangleF(0,0,100,100);
   RectangleF end = new RectangleF(100,100,100,100);
   UIView yourView = new UIView(start);

   UIView.Animate (120d, 0d, UIViewAnimationOptions.CurveLinear, delegate {
    yourView.Frame = end;
   }, delegate { });

Приведенный выше блок кода переместит ваш вид с 0,0 на 100 100 за 120 секунд. В момент запуска анимации yourView.Frame уже установлен на (100 100 100 100) ... поэтому yourView.Frame.X будет равен 100 в течение всех 120 секунд.

С другой стороны, если вы используете первую строку ниже в любое время в течение 120 секунд ...

   float currentX = yourView.Layer.PresentationLayer.Frame.X
   float currentProp = yourView.Layer.PresentationLayer.Frame.<any other frame property>

... вы в бизнесе. При анимации вы получите свойства живого кадра.

Прекрасно работает. Сейчас я использую его в своем приложении.

1 голос
/ 12 декабря 2010

Кадр вида не обновляется во время анимации, как вы уже поняли. Вы можете попробовать myview.layer.frame (только предположение, хотя я подозреваю, что это тоже не сработает).

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