2011-12-26 4 views
0

ビューに表示され消えるコンポーネント(翻訳移動などのアニメーション付き)を含むUIViewControllerが異なります。 各UIViewControllerのコード量を減らし、XIBファイルで設定できるクラスを1つ用意したいと思います。XIBファイル内のアニメーションを最小限の繰り返しコードで処理するためのベストプラクティス

だから私のXIBファイルが含まれています:

  • (以下のスクリーンショットでの「マイビュー」)は、2つの場所の間を移動する必要があるコンポーネントを
  • vVisible:表現するための指標のような働きのUIView可視場所
  • vHidden:ここで隠れ場所

を表すインジケータのように動作のUIViewそれはXcodeでどのように見えるかである:

enter image description here

そして、私は(ものUIViewControllerである)AppearingControllerを作成します。コンポーネントを表示または非表示にするアニメーションを制御します。私のUIViewControllerで、

-(void) showVisible:(BOOL)visible { 
CGRect frameDst = self.vVisible.frame; 
if(!self.visible) frameDst = self.vHidden.frame; 

CGPoint p = CGPointMake(CGRectGetMidX(frameDst), CGRectGetMidY(frameDst)); 
self.currentPosition = p; 

CABasicAnimation *frameTranslation = [CABasicAnimation animationWithKeyPath:@"position"]; 
frameTranslation.toValue = [NSValue valueWithCGPoint:p];  
frameTranslation.duration = 0.40; 
frameTranslation.repeatCount = 1; 
frameTranslation.removedOnCompletion = NO; 
frameTranslation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
frameTranslation.cumulative = NO; 
frameTranslation.additive = NO; 
frameTranslation.delegate = self; 
[self.v addAnimation:frameTranslation forKey:@"position"]; 
} 

ので:

IBOutlet UIView * vVisible; 
IBOutlet UIView * vHidden; 
IBOutlet UIView * v; 

と公共法(ちょうどそれがvVisibleのRECTとvHiddenビューのRECT間のアニメーションを実行する):それは3つのIBOutletの特性を有していますXIBのAppearingControllerインスタンスに結合するiboutlet /プロパティ:ヘッダファイルで

  • :コード、私はほんの数コードが必要です。実装ファイルで
  • :それはの作品コンポーネント

そして...を再表示/非表示にするアニメーションを実行するために:私は[FALSE self.appearingController showVisible]を呼び出すことができます。 しかし、私はそれがちょっとねじれて重く感じるので、私はかなり満足していません。理由は次のとおりです。

  • AppearingControllerはUIViewControllerです(私はオブジェクトライブラリのオブジェクトまたは外部オブジェクトで管理しませんでした)。
  • vVisibleとvHiddenはビューですが、ビューのメソッド/機能は必要ありません。私は位置を示すview.frameが必要です。

このアプローチはあなたにとって良い方法だと思われますか?

どうすれば改善できますか?

同じ目標を達成するために使用するパターンがありますか?

私は興味があります

ありがとうございます。

答えて

0

これはかなり良いようです!実際には、これをさまざまな方法でコーディングすることができます。しかし、この具体的な例では、コーディングでより良いアプローチを望むかどうかは関係ありません。はるかに大きなプロジェクトを取り上げる際には、データ構造やコーディングスキームをデザインして、時間制約や最適化された方法で処理する必要があります。

たとえば、100個の画像を処理する必要があるはるかに大きなプロジェクトでは、アニメーション用のクラスを作成し、それらをサブクラス化して参照するか、継承してアプローチを論理的かつ時間を節約します。あなたはポイントを持っていることを願っています!

関連する問題