TableViewセルで一連のアイコン画像をアニメーション化しようとしていますが、ImageView.StartAnimatingを機能させることができません。TableViewはUITableViewControllerにあり、TableViewの内容が設定されているTableViewDataSourceファイルがあります。
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を呼び出します(InvokeOnMainThreadブロック内のコードが実際にメインスレッドで実行されていることを確認するために、Console.WriteLinesを追加しました。また、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が呼び出されたときにアニメーションが正常に進行します。