2015-04-16 204 views
1

我正在爲視圖(moveonView)設置動畫效果。 Autolayout已被設置爲這個觀點。當我將moveonView的'y'位置從CABasicAnimation中的值中提取出來時,它不在動畫中的位置。我需要給一些填充值以將其放置在正確的位置上。爲什麼fromValue將我的視圖錯誤地放置? Breakpoint還顯示fromValue從「moveonView」中獲取了正確的「y」值,但仍然錯誤地放置了視圖。可能是什麼原因。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這是視圖左上角(在iOS上)的y座標時,意味着它與CGRectGetMinY(frame)相同。

然而,圖層的位置對應於視圖的center。所以當你在動畫position.y時,它與移動視圖中心的動畫相同。

你可以更新你的價值被使用CGRectGetMidY(frame)(注意,從MI ñ的變化MI d)。

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

這樣做的魔力。非常感謝你的幫助。謝謝你的時間來解釋我的概念了。 – Manoj

相關問題