17

私の目標は、UITableViewCells が UITableView の境界に近づき、カバー/明らかにされようとしているときに、UITableViewCells をフェードイン/フェードアウトさせることです。

私が試みてきたアプローチは、スクロール イベント中に UITableViewCell の座標を取得することです。問題は、すべてのセルが 0,0 に見えることです。座標を親テーブルとビューに変換しようとしましたが、それでも 0,0 になります。

したがって、一般的に、座標を取得する方法、または位置に基づいて UITableViewCells をフェードインおよびフェードアウトするより良い方法を誰かが知っている場合は、アドバイスをいただければ幸いです。

時間をありがとう、ジョエル

4

4 に答える 4

65

最初のステップは使用することです

CGRect rectInTableView = [tableView rectForRowAtIndexPath:indexPath];

これは、tableView内のセルのCGRectを報告します。ただし、この値はtableViewがスクロールしても変更されません。これは、テーブルの最初の行(最初に表示される行ではない)を基準にした位置です。画面上のセルの位置を取得するには、を使用してセルをスーパービュー座標系に変換する必要があります

CGRect rect = [tableView convertRect:rectInTableView toView:[tableView superview]];

したがって、次の行ですべてを実行します

CGRect rect = [tableView convertRect:[tableView rectForRowAtIndexPath:indexPath] toView:[tableView superview]];

スウィフト4

// Consider the indexPath at row 1, section 0.
let rectWithinTableView : CGRect = self.tableView.rectForRow(at: IndexPath(row: 1, section: 0))
let rectWithSuperViewCoordinates : CGRect = self.convert(rect: rectWithinTableView, to: self.tableView.superview)
于 2011-01-06T22:13:11.843 に答える
3

UIImageViewで、部分的に透明なグラデーションPNGを使用して、上下の透明度が低いオーバーレイを作成してみませんか?

テーブルのスクロールでセルの描画をいじると、パフォーマンスに大きな打撃を与えることになります。

于 2009-03-27T01:29:23.420 に答える
2

あなたは呼び出すことができます

- (CGRect)rectForRowAtIndexPath:(NSIndexPath *)indexPath;

任意のセルの rect を取得します。これには、rect 内の元の構造体の座標が含まれます。

于 2009-08-05T23:06:40.933 に答える
0

セルが UITableView の「セルサイズ」のサブビュー内に保持されていると思われるため、そのビューに関連するフレームが表示されます。

実際の答えはありませんが、UIScrollView のデリゲート クラスである UIScrollViewDelegate を確認することをお勧めします。それはそれに応答し– scrollViewDidScroll:、そこからオフセットを手動で計算できます。UIScrollView は UITableView のスーパークラスです。

- (CGPoint)convertPoint:(CGPoint)point toView:(UIView *)viewUIView のメソッドを使用して、ポイント (原点など) を別のビューの座標に変換できます。

于 2009-03-26T23:16:21.197 に答える