3

TTPhotoViewControllerサンプルiPadアプリケーションに実装しようとしています。私は適切TTPhotoSourceTTPhotoプロトコルを実装しました。画像は表示されますが、スワイプするまで表示されTTPhotoViewControllerません。

下のタブ バーの右ボタンと左ボタンがまったく機能していないようで、表示される画像が変わることはありません。最後のUIActivityIndicatorView画像または最初の画像に到達すると、 は表示されず、右ボタンと左ボタンは検証されません。

TTPhotoViewControllerビューに追加するオブジェクトの rootViewController としてサブクラスを初期化しUINavigationControllerています。

これにより、ここで直面する問題の可能性が除外されます: http://three20.stackexchange.com/questions/78/ttphotoviewcontroller-not-loading-images-immediately

他に何が欠けていますか?誰かが同様の問題に直面し、回避策を見つけましたか?

ありがとう、ラージ

4

3 に答える 3

3

おそらくviewWillAppear、サブクラスのメソッドをオーバーライドしましTTPhotoViewControllerたが、スーパー メソッドを呼び出すのを忘れていました。

于 2011-03-08T00:15:14.757 に答える
1

同じ問題がありました。TTPhotoSource は、読み込みが完了したときにデリゲートに modelDidFinishLoad: を送信する必要があります... そうしないと、TTPhotoViewController はまだ準備ができていないと想定します。

しかし、それだけではありません。特にローカル画像をロードする場合、TTPhotoViewController がデリゲートとして登録される前に、写真ソースのロードが終了する可能性があります。そのため、デリゲートが TTPhotoSource に追加されているかどうかを確認し、デリゲートが追加されたときに読み込みが完了している場合は、それらに modelDidFinishLoad: メッセージを送信する必要があります。

TTModel から継承する場合は、NSMutableArray に登録していつ変更されたかを確認する方法がないため、言うは易く行うは難しです。

だから...次のコードをTTPhotoViewControllerサブクラスに追加してください...

// superDelegates KVO Mutator Methods

- (NSMutableArray*)delegates {
 return [self mutableArrayValueForKey:@"superDelegates"];
}

- (void)insertObject:(id)object inSuperDelegatesAtIndex:(NSUInteger)index {
 [super.delegates insertObject:object atIndex:index];

 if ([self isLoaded]) {
  if ([object respondsToSelector:@selector(modelDidFinishLoad:)]) {
   [object performSelector:@selector(modelDidFinishLoad:) withObject:self];
  }
 }
}

- (void)removeObjectFromSuperDelegatesAtIndex:(NSUInteger)index {
    [super.delegates removeObjectAtIndex:index];
}

- (NSArray*) superDelegates {
 return super.delegates;
}

これにより、superDelegates という名前の「仮想」プロパティが作成されます。これは単なる NSArray であり、NSMutableArray ではありません。insertObject:inSuperDelegatesAtIndex: および removeObjectFromSuperDelegatesAtIndex: メソッドは、それらの名前に「superDelegates」プロパティの名前が含まれているため、Key-Value Coding 関数 (非公式のプロトコルであるため自動的に使用されます) を許可します。 NSMutableArray は、ミューテーション操作を insertObject:inSuperDelegatesAtIndex: および removeObjectFromSuperDelegatesAtIndex: メソッドの呼び出しに変換することで、superDelegates プロパティを編集できるようにします。

次に、「デリゲート」メソッドをオーバーライドして、そのような生成されたプロキシを返すだけです。すべての配列の変更が実行され、TTPhotoViewController がアタッチされたときに適切なロード通知を送信できます。

于 2010-08-10T00:29:16.627 に答える
0

いくつかのデバッグの後、問題を発見しました。これは簡単な修正です。

Three20UI プロジェクトの TTModelViewController クラスで、メソッドを見つけます。

-refresh

if 条件をコメントします。

if (_isViewAppearing)

最終的-updateViewに、以前に呼び出されていなかったメソッドが呼び出されます。

これは簡単な修正です。bool については_isViewAppearing後で調査する必要があります。

于 2010-06-10T11:40:51.283 に答える