にかなり大きな画像を表示していUITableView
ます。ユーザーがスクロールすると、テーブル ビューで常に中央の写真が真ん中にスナップされるようにしたいと思います。つまり、テーブルが静止状態にある場合、テーブルは常にUITableViewCell
中央にスナップされます。
どうやってこれを行うのですか?
にかなり大きな画像を表示していUITableView
ます。ユーザーがスクロールすると、テーブル ビューで常に中央の写真が真ん中にスナップされるようにしたいと思います。つまり、テーブルが静止状態にある場合、テーブルは常にUITableViewCell
中央にスナップされます。
どうやってこれを行うのですか?
@jszumski が投稿したものから構築し、ドラッグ中にスナップを発生させたい場合は、次のコードを使用します。
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
[self centerTable];
}
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView {
[self centerTable];
}
- (void)centerTable {
NSIndexPath *pathForCenterCell = [self.tableView indexPathForRowAtPoint:CGPointMake(CGRectGetMidX(self.tableView.bounds), CGRectGetMidY(self.tableView.bounds))];
[self.tableView scrollToRowAtIndexPath:pathForCenterCell atScrollPosition:UITableViewScrollPositionMiddle animated:YES];
}
上記の@ jesse-rusakの回答を拡張すると、これは、高さが可変のセルがある場合に UITableViewController サブクラスに追加する必要があるコードです。これにより、受け入れられた回答での二重スクロールの問題が回避されます。
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
NSIndexPath *pathForTargetTopCell = [self.tableView indexPathForRowAtPoint:CGPointMake(CGRectGetMidX(self.tableView.bounds), targetContentOffset->y)];
targetContentOffset->y = [self.tableView rectForRowAtIndexPath:pathForTargetTopCell].origin.y;
}
UITableView は UIScrollView を拡張します...
myTableView.pagingEnabled = YES