1

パン ジェスチャがトリガーされたときに CALayers のサイズを変更するカスタム ビューを作成しました。コントロールが法線に追加されるUIVIewと、アニメーションは期待どおりに動作します。

UITableViewCellビューがビアに追加されるとaddSubView、アニメーションがびくびくします。ジェスチャ ハンドラにいくつかのステートメントを配置NSLogしましたが、期待どおりに動作しています。

私が経験しているこの予期しない動作についてUITableView、またはその原因となるものはありますか? UITableViewCelladdSubView を使用してカスタム ビューを追加することは正しいですか?

編集

問題についてもう少し情報があります。この問題は、特定の環境でのみ発生しているようです。

*iPhone 3GS、iOS 4.2.1 -はい
iPod Touch (Retnia)、5.1 -いいえ
iPod Simulator 4.2 -いいえ
iPod Simulator 5.1 -いいえ

Lorean と DavidH からの提案も取り入れましたが、問題は解決しませんでした。

*XCode からビルドすると、3gs デバイスの横に「ベース SDK を 4.3 にオーバーライドしています」というメッセージが表示されます。

これは潜在的な問題になる可能性がありますか?

4

3 に答える 3

1

ビューを contentView のサブビューとして配置する必要があることに同意しますが、別の潜在的な問題があります。システム全体が 2 つの切り離されたアニメーションをサポートするように設計されていないため、移動する scrollView 内のアニメーションは歴史的にひどいものです。

この問題の解決策は、ユーザーがセルに触れたときにスクロールを無効にし (つまり、myTableView.scrollEnabled = NO)、パン ジェスチャが完了したら (すべてのアニメーション)、再度有効にすることです。

編集:これは少しファンキーに聞こえるでしょうが、私が過去に同様に行ったように機能するはずです. 最初のタッチイベントを取得したら、レイヤーのフレームがself.view座標であることを計算し、このフレームを使用してビューに追加しますが、古いフレームを保存します。ユーザーには何も表示されず、ビューがヒントになっています。明らかに、テーブルが動かないようにする必要もあります。ユーザーの操作が完了したら、ビューを元のフレームを使用してセルに戻します。

タッチの仕方によっては、目的のパン ビューをオーバーレイする明確な UIView で最初のタッチをインターセプトする必要がある場合があります。タッチされたら、上記のすべてを実行してから、最初のタッチをビューに転送します。うまくいけば、このステップは必要ありません。

于 2012-08-20T21:27:05.413 に答える
1

問題を解決するハックを実装しました。アニメーションは本当に必要ないので、完全にオフにすることにするかもしれませんが、これよりも良い答えがあれば、喜んで受け入れます.

if ([[[UIDevice currentDevice] systemVersion] floatValue]<5.0) 
{    
    [CATransaction begin];
    [CATransaction setDisableActions: YES];
}

//do stuff

if ([[[UIDevice currentDevice] systemVersion] floatValue]<5.0) [CATransaction commit];
于 2012-08-21T01:54:08.560 に答える
1

カスタム ビューは、セルのコンテンツ ビューにのみ追加する必要があります。

http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewCell_Class/Reference/Reference.html

于 2012-08-20T20:31:29.717 に答える