2012-12-07 1 views
1

개별적으로 작동하는 두 개의 애니메이션이 있다고 가정 해 봅니다. 그러나 동시에 작동하도록하고 싶습니다.Monotouch CGAffineTransform, 동일한 뷰에서 동시에 많은 Affine Transforms 애니메이션 적용

public static void SlideAnimation(string name, UIView view, float xOffset, float yOffset, float duration) 
    {   
     if (view != null) 
     { 
      // ****** Begin Animation ****** // 
      UIView.BeginAnimations(name + " SlideAnimation"); 
      UIView.SetAnimationDuration(duration); 
      UIView.SetAnimationDelegate (view); 
      CGAffineTransform move = CGAffineTransform.MakeTranslation(xOffset, yOffset); 
      CGAffineTransform transforms = move; 
      view.Transform = transforms; 
      UIView.CommitAnimations(); 
      // ****** End Animation ****** // 
     } 
    }  

그리고

public static void GrowAnimation(string name, UIView view, float xScale, float yScale, float duration) 
    {   
     if (view != null) 
     { 
      // ****** Begin Animation ****** // 
      UIView.BeginAnimations(name + " GrowAnimation"); 
      UIView.SetAnimationDuration(duration); 
      UIView.SetAnimationDelegate (view); 
      CGAffineTransform scale = CGAffineTransform.MakeScale(xScale, yScale); 
      CGAffineTransform transforms = scale; 
      view.Transform = transforms; 
      UIView.CommitAnimations(); 
      // ****** End Animation ****** // 
     } 
    }  

위의 두 가지 기능

은 모두 CGAffineTransform이의 내가 정확히 같은 시간에 같은 뷰를 실행하려는 가정 해 봅시다 사용하는 애니메이션이다. 나는 그 결과를 슬라이딩과 동시에 성장시키는 관점으로하고 싶다.

1.) 첫 번째 시도는 하나의 애니메이션을 호출 한 후 바로 다음 애니메이션을 호출하는 것이 었습니다. 그러나 그것은 실패했다. 기본적으로 첫 번째 애니메이션에 애니메이션을 적용하기 시작했지만 다음 애니메이션으로 넘어 가면 첫 번째 애니메이션이 중단되었습니다. 결과는 두 번째 애니메이션에만 애니메이션을 적용하고 첫 번째 애니메이션을 완전히 건너 뛰는 것이 었습니다 ... 마치 한 번에 하나의 애니메이션 만 수행 할 수있는 것처럼 거의되었습니다.

2.) 두 번째 시도는 각 애니메이션을 고유 한 스레드로 호출하는 것입니다.이 작업을 동시에 애니메이션화하는 목표는 달성되었지만 실제로 이렇게하려면 다중 스레드가 필요합니까? 더 좋은 방법이 있어야합니다 ...

추 신 : CAKeyFrameAnimation에 CAAnimationGroup이있는 것처럼 CGAffineTransform에 일종의 그룹 애니메이션이 있습니까?

미리 감사드립니다.

답변

3

그냥 초를 하나의 변환을 생성하고 추가

CGAffineTransform composite = CGAffineTransform.MakeTranslation(xOffset, yOffset); 
composite.Scale(xScale, yScale) 
view.Transform = composite;