我试图在TableView单元格中设置一系列图标图像的动画,并且我无法使ImageView.StartAnimating正常工作。 TableView位于UITableViewController中,并且有一个TableViewDataSource文件用于设置TableView内容。为什么ImageView.StartAnimating不会在主线程上动画
在我的TableViewDataSource中,我设置了PNG数组并配置了各种动画首选项。
UIImage image0 = GetImage("Images/[email protected]");
UIImage image45 = GetImage("Images/[email protected]");
UIImage image90 = GetImage("Images/[email protected]");
UIImage image135 = GetImage("Images/[email protected]");
UIImage[] images = new UIImage[] { image0, image135, image90, image45 };
cell.ImageView.AnimationImages = images;
cell.ImageView.AnimationDuration = 0.5;
cell.ImageView.AnimationRepeatCount = 0;
cell.ImageView.Image = image0;
// cell.ImageView.StartAnimating(); // If called here images will animate
如果我请StartAnimating在TableViewDataSource(在上面的示例注释)的图像中的动画序列。
但它在我的UITableViewController中,我希望图像在响应某个特定事件时被激活。
在viewWillAppear中我得到特定小区的ImageView的
UITableViewCell cell = TableView.CellAt(NSIndexPath.FromRowSection(0, 2));
imagetoAnimate = (UIImageView)cell.ContentView.ViewWithTag(ICON_TAG);
然后,当事件引发的参考我打电话StartAnimating在主线程(我加了Console.WriteLines只是为了确认里面的代码InvokeOnMainThread块确实执行主线程上 - 这也是所有的InvokeOnMainThread块内的其他代码在那里以前)
private void Application_Event()
{
Console.WriteLine("Running on Thread ID {0}. Is Main thread? {1}", Thread.CurrentThread.ManagedThreadId, NSThread.IsMain); // Returns false
InvokeOnMainThread(delegate
{
Console.WriteLine("Running on Thread ID {0}. Is Main thread? {1}", Thread.CurrentThread.ManagedThreadId, NSThread.IsMain); // Returns true
imageToAnimate.StartAnimating(); // If called here images don't animate
UpdateCount();
UpdateStatus();
});
}
这一定是一些简单的我失踪。如果您需要更多信息,请与我们联系。
在此先感谢。
UPDATE#1
使用UpdateCount和UpdateStatus方法含有看起来与ImageView.StartAnimating会干扰TableView.ReloadData语句(注释出两条线允许动画进行)。
有没有人听说过这种类型的事情发生之前?
更新#2
移动码块,设置ImageView.AnimationImages出GetCell方法并进入的UITableViewController解决了问题。
UIImage image0 = GetImage("Images/[email protected]");
UIImage image45 = GetImage("Images/[email protected]");
UIImage image90 = GetImage("Images/[email protected]");
UIImage image135 = GetImage("Images/[email protected]");
UIImage[] images = new UIImage[] { image0, image135, image90, image45 };
cell.ImageView.AnimationImages = images;
cell.ImageView.AnimationDuration = 0.5;
cell.ImageView.AnimationRepeatCount = 0;
cell.ImageView.Image = image0;
完成此操作并取消注释TableView.ReloadData语句时,在调用ImageView.StartAnimating时动画正常进行。
如果你在你调用'imageToAnimate.StartAnimating()'的地方放置了一个断点,它是非空的并且具有所有适当的值,例如'AnimationImages'填充了,对吗? – jonathanpeppers 2013-03-26 16:58:31
是的,imageToAnimate不为null,AnimationImages包含四个图像,isAnimating = false(当StartAnimating调用时,动画会翻转为true)。 – billmaya 2013-03-26 18:18:06
GetCell被调用或表视图后立即重新加载? – jonathanpeppers 2013-03-26 18:26:08