2013-03-26 2 views
2

TableView 셀에서 일련의 아이콘 이미지에 애니메이션을 적용하려고하는데 ImageView.StartAnimating을 사용할 수 없습니다. TableView는 UITableViewController에 있으며 TableView 내용이 설정된 TableViewDataSource 파일이 있습니다.ImageView.StartAnimating이 메인 스레드에서 애니메이션을 적용하지 않는 이유

내 TableViewDataSource에서 PNG 배열을 설정하고 다양한 애니메이션 환경 설정을 구성합니다. I는 (상기 예에서 주석)을 TableViewDataSource에 StartAnimating 호출하면

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 

는 이미지 시퀀스의 애니메이션.

하지만 이미지가 특정 이벤트가 발생하면 이에 따라 애니메이션을 적용하는 UITableViewController에 있습니다.

가 ViewWillAppear에서 내가 주 스레드에서 StartAnimating를 호출 특정 셀의 이미지 뷰 이벤트가 발생할 그런

UITableViewCell cell = TableView.CellAt(NSIndexPath.FromRowSection(0, 2)); 
imagetoAnimate = (UIImageView)cell.ContentView.ViewWithTag(ICON_TAG); 

에 대한 참조를 가져옵니다 (필자는 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 문을 포함 (두 라인을 주석하는 애니메이션 이행시킨다).

이전에 이런 유형의 정보를 들어 본 사람이 있습니까?

UPDATE # 2

GetCell 방법에서 그리고있는 UITableViewController 문제 해결에 ImageView.AnimationImages을 설정하는 코드 블록을 이동.

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; 

이 수행됩니다 및 ImageView.StartAnimating가 호출 될 때 TableView.ReloadData 문은 일반적으로 애니메이션의 진행을 주석 처리합니다.

+0

'imageToAnimation.StartAnimating()'을 호출 할 곳에 중단 점을 넣으면 null이 아니며 'AnimationImages'와 같은 적절한 값이 모두 채워져 있습니까? – jonathanpeppers

+0

예, imageToAnimate가 null이 아니고 AnimationImages에 네 개의 이미지가 있고 isAnimating = false입니다 (isAnimating이 StartAnimating이 호출 될 때 true로 넘김). – billmaya

+0

'GetCell'이 호출되거나 테이블 뷰가 바로 다시로드됩니까? – jonathanpeppers

답변

0

UITableView.ReloadData을 호출하면 모든 셀이 다시로드되고 테이블보기 소스에서 GetCell이 다시 호출됩니다.

이렇게하면 애니메이션이 중단됩니다.

관련 문제