私はカスタムUITableViewCellを使用しており、そこにサブクラス化されたUIViewを配置しています (内contentView
、ナッチ)。問題のUIViewには、方向矢印と 2 行のサポート テキストが表示されます。
矢印は、背景色と矢印形のマスクを持つレイヤーによって表示されます。矢印が指している方向に応じて、背景色が 2 つの可能性のいずれかに変化します。
ビューは、矢印を更新する必要があるたびにNSNotificationを受け取ります (現在の見出しに基づいていますが、同一ではありません - 各セルとビューは異なります)。通知を受け取ると、ビューはプライベート メソッドを呼び出して変換を実行します。これにより、矢印レイヤーがアニメーション化され、次のように、その中心を中心に新しい方向に効果的に回転します。
// Update layer BG color, then ...
[UIView setAnimationBeginsFromCurrentState:YES];
CATransform3D transform = CATransform3DMakeRotation(DegreesToRadians(locationDirection), 0, 0, 1);
_arrowLayer.transform = transform;
(注:_arrowLayer
内部使用のみであり、プロパティを通じて公開されません。)
UIViewには、サポート テキストの作成に使用される情報を設定するためのプロパティもあります。これが変更されsetNeedsDisplay
て呼び出されると、drawRect:
メソッドは計算を行い、結果のテキストを描画します。
それはすべて順調です。ただし、私が直面している大きな問題が 1 つあります。
矢印がアニメーション化されているのと同時にテーブルビューをスクロールすると、メジャーリーグのスクロールが途切れ途切れになり、スクロールが短く停止することがよくあります。これが (最小限のテスト ケースの名前で) の唯一のビューであってもcontentView
、問題ではありません。
デバイスを動かさない場合、スクロールはある程度許容されますが、改善の余地があります。
私は単に根本的な誤りを犯していることを願っています (使用しないでdrawRect:
ください。他の方法で変換しますか?上記のどれもありませんか?)
手がかり/アドバイスをよろしくお願いします!
2011 年 10 月 4 日更新: UITableViewControllerにUIScrollViewDelegate ( UIScrollViewプログラミング ガイドに従って) を監視させて、スクロールの開始/停止を試みた後、各方向矢印ビューがデリゲート (この場合はテーブル VC) にアニメーション化してもよいかどうかを尋ねます。これもあまり役に立ちません。アニメーションが進行中の場合は、運が悪いです。おそらく、方向矢印ビューで特定の通知を探しているNSNotificationが適切です。(少し逆に聞こえますね。他のオブジェクトに、送信できることを通知するということですか?うーん。)