2015-04-16 3 views
1

Я анимирую представление (moveonView). Для этого представления установлено значение Автозапуск. Когда я даю позицию «y» moveonView как fromValue в CABasicAnimation, он не находится в этом месте во время анимации. Мне нужно дать некоторую дополнительную величину, чтобы поместить ее на правильную позицию. Почему fromValue неправильно отображает мой взгляд? Точка останова также показывает, что fromValue берет правильное значение «y» из «moveonView», но все же неправильно помещает представление. Что может быть причиной.CABasicAnimation fromValue & CAKeyframeAnimation values ​​error

CABasicAnimation *animation = [CABasicAnimation animation]; 
animation.keyPath = @"position.y"; 
animation.delegate = self; 
animation.fromValue = [NSNumber numberWithFloat:_moveonView.frame.origin.y]; 
animation.toValue = [NSNumber numberWithFloat:self.view.frame.size.height - 100]; //[NSValue valueWithCGPoint:endPosition.origin]; 
animation.duration = 3; 
[_moveonView.layer addAnimation:animation forKey:@"basic"]; 

мне нужно дать какое-то значение отступа, чтобы поместить его в точном положении

animation.fromValue = [NSNumber numberWithFloat:_moveonView.frame.origin.y + 50]; 

ответ

2

Происхождение кадра и положение слоя не та же точка.

Когда вы запрашиваете frame.origin.y, то есть координату y в верхнем левом углу обзора (на iOS), что означает, что это то же самое, что и CGRectGetMinY(frame).

Позиция слоя, однако, соответствует изображению center. Поэтому, когда вы анимации position.y, это то же самое, что перемещение центра просмотра.

Вы можете обновить ваши от стоимости используют CGRectGetMidY(frame) (обратите внимание на изменение от ми п к ца д).

animation.fromValue = @(CGRectGetMidY(_moveonView.frame)); 
+0

Это сделало магию. Большое вам спасибо за вашу помощь. Спасибо за ваше время, чтобы объяснить мне эту концепцию. – Manoj

Смежные вопросы