2016-07-29 3 views
2

を変形させる:cgaffinetransformmakescaleとcgaffinetransformmakerotationを使用して、私はシンプルなUIViewの持っている私の見解

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)]; 
view.backgroundColor = [UIColor greenColor]; 
[self.view addSubview:view]; 
self.someView = view; 

をそれから私はこの

[UIView animateWithDuration:10 
         delay:1 
        options:UIViewAnimationOptionCurveEaseInOut 
       animations:^{ 
    self.someView.center = CGPointMake(CGRectGetWidth(self.view.bounds) - CGRectGetWidth(self.someView.frame)/2, 150); 

        CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI); 
        self.someView.transform = CGAffineTransformScale(transform, 2, 0.5); 

} 
       completion:^(BOOL finished) { 

       }]; 

ながら、この単純なアニメーション、が変形して実行されます。私が知っている限り、それは回転し、サイズを変更する必要があります。なぜそれが起こっているのか理解できません。どうすれば修正できますか?

ありがとうございました

答えて

1

問題は、スケーリングと回転を組み合わせてアニメートすることです。最終的な結果は、それらを別々にアニメートするのと同じですが、その間のフレームは簡単には定義されません。したがって、アニメーションフレームワークは推測を行い、期待することではありません。

アニメーションに回転とスケーリングが別々に表示されるようにするには、アニメーションを個別にビュー階層に適用する必要があります。たとえば、次のように

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)]; 
view.backgroundColor = [UIColor greenColor]; 
[self.view addSubview:view]; 
self.someView = view; 

UIView *innerView = [[UIView alloc] initWithFrame:view.bounds]; 
innerView.backgroundColor = [UIColor blueColor]; 
[view addSubview:innerView]; 
self.someInnerView = innerView; 

アニメーション変換を分割します。

[UIView animateWithDuration:10 
         delay:1 
        options:UIViewAnimationOptionCurveEaseInOut 
       animations:^{ 
        self.someView.center = CGPointMake(CGRectGetWidth(self.view.bounds) - CGRectGetWidth(self.someView.frame)/2, 150); 

        self.someView.transform = CGAffineTransformMakeRotation(M_PI); 
        self.someInnerView.transform = CGAffineTransformMakeScale(2, 0.5); 

       } 
       completion:^(BOOL finished) { 

       }]; 
関連する問題