gpt4 book ai didi

ios - 为什么 ImageView.StartAnimating 不会在主线程上设置动画

转载 作者:行者123 更新时间:2023-12-01 16:51:15 24 4
gpt4 key购买 nike

我正在尝试为 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 block 内的代码确实在主线程上执行 - 它是。此外,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 方法包含似乎干扰 ImageView.StartAnimating 的 TableView.ReloadData 语句(注释掉这两行允许动画继续进行)。

有没有人听说过这种事情发生过?

更新 #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 时正常进行。

最佳答案

调用UITableView.ReloadData将重新加载所有单元格,GetCell将在您的表格 View 源上再次被调用。

这可能会阻止动画的发生。

关于ios - 为什么 ImageView.StartAnimating 不会在主线程上设置动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15641064/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com