在我的视图中,我有一个UILabel
和一个UITableView
。
我希望它们向下动画40像素。以下是我的代码
var newFrame = newsStand.Frame;
newFrame = new CGRect (newsStand.Frame.X, newsStand.Frame.Y+40, newsStand.Frame.Width, newsStand.Frame.Height);
UIView.BeginAnimations ("slideAnimation");
UIView.SetAnimationDuration (2);
UIView.SetAnimationCurve (UIViewAnimationCurve.EaseInOut);
UIView.SetAnimationDelegate (this);
UIView.SetAnimationDidStopSelector (new Selector ("slideAnimationFinished"));
nfloat newY=searchLabel.Center.Y+40;
searchLabel.Center = new CGPoint (searchLabel.Center.X, newY);
newsStand.Frame = newFrame;
UIView.CommitAnimations ();
newsStand
是我的UITableView
实例和searchLabel
,UILabel
实例。执行此代码时,searchLabel
通过向下移动40个像素按预期动画。但newsStand
最初向上跳跃40像素并动画到其原始位置。我尝试过设置searchLabel
的中心(就像我为newsStand
所做的那样)而不是Frame。但结果是一样的。是什么导致了这种行为?
答案 0 :(得分:2)
你的方法非常复杂。您可以使用UIView.Animate()
来大大简化动画:
var myLabel = new UILabel (new CGRect (100, 100, 100, 40))
{
Text = "Animate me!",
TextColor = UIColor.Yellow
};
window.Add (myLabel);
UIView.Animate (
duration: 0.5,
animation: () => myLabel.Center = new CGPoint (myLabel.Center.X, myLabel.Center.Y + 40),
completion: () => {}
);