2011-12-21 6 views
4

私は非常に厄介な問題に直面しています。 ここにコンテキストがあります:私はメインビューのサブビューである「長方形」ビューを持っています。 私がしようとしていることは簡単です。ボタンをクリックすると、x軸を平行移動して消えるようにするために、「四角形」ビューを表示します。以前の「長方形」ビューの代わりに新しいサブビューを追加して翻訳します。 ボタンをもう一度押すと、CGAffineTransformMakeTranslationが新しい「長方形」ビューのフレームを変更しないように、アニメーションが画面から開始されるという点を除いては問題ありません。 は、ここでは、コードです:iPhone/iPad - Core Animation - CGAffineTransformMakeTranslationはフレームを変更しません

UIView *rectangleView = [detailView viewWithTag:4]; //the actual frame is (20.0, 30.0, 884.0, 600.0) 

[UIView animateWithDuration:0.5 animations:^{ 
    [rectangleView setTransform:CGAffineTransformMakeTranslation(-1000, 0)]; 
} completion:^(BOOL finished) { 
    [rectangleView removeFromSuperview]; 
    UIView *otherView = [[UIView alloc] initWithFrame:CGRectMake(1020.0, 30.0, 884.0, 600.0)]; 
    [otherView setBackgroundColor:[UIColor purpleColor]]; 
    [otherView setTag:4]; 
    [detailView addSubview:otherView]; 
    [UIView animateWithDuration:0.5 animations:^{ 
     [otherView setTransform:CGAffineTransformMakeTranslation(-1000, 0)]; 
    } completion:^(BOOL finished) { 
     [otherView release]; 
    }]; 
}]; 

答えて

3

2番目のビューが追加された後で、トランスフォームはすでにCGAffineTransformMakeTranslation(-1000, 0)に設定されています。そのビューを削除する場合は、まったく同じトランスフォームを設定するため、効果はありません。あなたはここに2つのオプションがあります:代わりに変換を適用する

CGAffineTransform newTransform = CGAffineTransformConcat(rectangleView.transform, CGAffineTransformMakeTranslation(-1000, 0)); 
[rectangleView setTransform:newTransform]; 
  • は(その中心プロパティ経由など)を直接ビュー位置で動作

    1. をビューがすでに持って変換する変換を適用します

      UIView *rectangleView = [detailView viewWithTag:4]; //the actual frame is (20.0, 30.0, 884.0, 600.0) 
      CGAffineTransform tf = CGAffineTransformMakeTranslation(-1000, 0); 
      [UIView animateWithDuration:0.5 animations:^{ 
          [rectangleView setCenter: CGPointApplyAffineTransform(rectangleView.center, tf)]; 
      } completion:^(BOOL finished) { 
          [rectangleView removeFromSuperview]; 
          UIView *otherView = [[UIView alloc] initWithFrame:CGRectMake(1020.0, 30.0, 884.0, 600.0)]; 
          [otherView setBackgroundColor:[UIColor purpleColor]]; 
          [otherView setTag:4]; 
          [detailView addSubview:otherView]; 
          [UIView animateWithDuration:0.5 animations:^{ 
           [otherView setCenter: CGPointApplyAffineTransform(otherView.center, tf)]; 
          } completion:^(BOOL finished) { 
           [otherView release]; 
          }]; 
      }]; 
      
  • +0

    これは機能しています。おかげで多くのウラジミール。私は別の(おそらく愚かな)質問があります。ビューに変換があるかどうかをテストする方法はありますか?何かのように(![rectangleView transform])NSLog(@ "変換がないので、連結する必要はありません") – Dabrut

    +0

    @Dave、ビューの変換をCGAffineTransformIsIdentity関数で確認できます – Vladimir

    +0

    ありがとう:) – Dabrut

    1

    centerプロパティをアニメーション化する代わりに、アフィン変換を使用してみてください。変換は加法的ではないので、2番目のアニメーション(新しく追加された詳細ビューを画面外に移動したとき)は、実際にその変換(-1000,0)が適用されているため、ビューを実際に変更することはありません。

    関連する問題