Xamarin UITableView 动画从错误的位置开始
Xamarin UITableView animation starts from wrong position
在我看来我有一个 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 个像素并动画到其原始位置。我已经尝试设置 newsStand
的中心(就像我为 searchLabel
所做的那样)而不是 Frame 。但结果是一样的。是什么导致了这种行为?
你的方法很复杂。您可以使用 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: () => {}
);
在我看来我有一个 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 个像素并动画到其原始位置。我已经尝试设置 newsStand
的中心(就像我为 searchLabel
所做的那样)而不是 Frame 。但结果是一样的。是什么导致了这种行为?
你的方法很复杂。您可以使用 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: () => {}
);