Vap*_*olf 18 objective-c uitableview uiscrollviewdelegate ios
我正在显示相当大的图像UITableView
.当用户滚动时,我希望在桌面视图中始终将中心最多的照片捕捉到中间.也就是说,当桌子处于静止状态时,它将始终UITableViewCell
与中心对齐.
怎么做到这一点?
jsz*_*ski 29
您可以使用以下UIScrollViewDelegate
方法UITableView
执行此操作:
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
// if decelerating, let scrollViewDidEndDecelerating: handle it
if (decelerate == NO) {
[self centerTable];
}
}
- (void)scrollViewDidEndDecelerating:(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];
}
Run Code Online (Sandbox Code Playgroud)
Jes*_*sak 17
有一个UIScrollView委托方法,特别是为此!
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
当用户停止滚动时,表视图(滚动视图)将调用.您可以设置操作targetContentOffset
以确保它最终到达您想要的位置,并且它将在该位置结束减速(就像分页UIScrollView一样).
例如,如果你的细胞都高100点,你可以这样做:
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
targetContentOffset->y = 100 * (int)targetContentOffset->y/100;
}
Run Code Online (Sandbox Code Playgroud)
当然,您也可以检查targetContentOffset
传入的内容以查看它将要着陆的位置,然后找到所在的单元格并对其进行适当更改.
小智 6
扩展@ 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;
}
Run Code Online (Sandbox Code Playgroud)
根据@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];
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8619 次 |
最近记录: |