我正在尝试在TableView单元格中制作一系列图标图像,但我无法让ImageView.StartAnimating工作。 TableView位于UITableViewController中,并且有一个TableViewDataSource文件,其中设置了TableView内容。
在我的TableViewDataSource中,我设置了PNG数组并配置了各种动画首选项。
UIImage image0 = GetImage("Images/image_at_0_degrees@2x.png");
UIImage image45 = GetImage("Images/image_at_45_degrees@2x.png");
UIImage image90 = GetImage("Images/image_at_90_degrees@2x.png");
UIImage image135 = GetImage("Images/image_at_135_degrees@2x.png");
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
如果我在TableViewDataSource中调用StartAnimating(在上面的示例中已注释掉),则图像将按顺序生成动画。
但它在我的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();
});
}
这是我想念的简单事情。如果您需要更多信息,请与我们联系。
提前致谢。
更新#1
UpdateCount和UpdateStatus方法包含TableView.ReloadData语句,这些语句似乎干扰了ImageView.StartAnimating(注释掉两行都允许动画继续进行)。
有没有人听说过此类事情发生过?
更新#2
移动将ImageView.AnimationImages设置为GetCell方法并进入UITableViewController的代码块解决了这个问题。
UIImage image0 = GetImage("Images/image_at_0_degrees@2x.png");
UIImage image45 = GetImage("Images/image_at_45_degrees@2x.png");
UIImage image90 = GetImage("Images/image_at_90_degrees@2x.png");
UIImage image135 = GetImage("Images/image_at_135_degrees@2x.png");
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时,动画会正常进行。
答案 0 :(得分:0)
调用UITableView.ReloadData
将重新加载所有单元格,并且会在您的表格视图源上再次调用GetCell
。
这可能会阻止动画发生。