背景:selItem为scrollView的子视图, scrollView为父视图,将selItem水平置中到父视图scrollView中。
// 让选中的item位于scrollView的水平中间, selItem是scrollView的子视图
- (void)refreshContenOffset {
CGFloat width = self.scrollView.frame.size.width;
CGSize contentSize = self.scrollView.contentSize;
// 如果contentSize的宽度小于frame的宽度,直接返回,不用调整scrollView的contentOffset
if (contentSize.width <= width) {
return;
}
CGRect frame = self.selItem.frame;
// selItem中点到contentSize左边距离
CGFloat edgeLeftToSelItemCenterX = CGRectGetMidX(frame);
// selItem中点到contentSize右边距离
CGFloat edgeRightToSelItemCenterX = contentSize.width - edgeLeftToSelItemCenterX;
CGFloat targetX = 0.0;
if (edgeLeftToSelItemCenterX < width / 2.0) { //如果selItem中点到左边的距离小于bounds宽度的一半,scrollView滑到最左边
targetX = 0.0;
} else if (edgeRightToSelItemCenterX < width / 2.0) { //如果selItem中点到右边的距离小于bounds宽度的一半,scrollView滑到最右边
targetX = contentSize.width - width;
} else { //将selItem置中
targetX = edgeLeftToSelItemCenterX - width / 2.0;
}
[self.scrollView setContentOffset:CGPointMake(targetX, 0) animated:YES];
网友评论