현재 페이지 가져오기
스크롤 보기에서 표시되는 현재 페이지를 가져오려고 합니다(페이지가 올바른 용어가 아닐 수 있음).이것을 포함하는 변수를 찾을 수 없습니다.그러나 표시기가 현재 스크롤 보기의 하위 보기를 표시할 수 있기 때문에 어딘가에 있어야 한다고 생각합니다.
이것은 우리에게 완전히 숨겨져 있는 것입니까, 아니면 제가 접근할 수 있는 방법이 있습니까?
.UIScrollView현재 페이지의 속성입니다.다음을 사용하여 계산할 수 있습니다.
int page = scrollView.contentOffset.x / scrollView.frame.size.width;
가장 가까운 페이지로 반올림하거나 반올림하려면 다음을 사용합니다.
CGFloat width = scrollView.frame.size.width;
NSInteger page = (scrollView.contentOffset.x + (0.5f * width)) / width;
이 코드를 사용하는 것이 좋습니다.
int indexOfPage = scrollView.contentOffset.x / scrollView.frame.size.width;
그러나 이 코드를 사용하면 보기가 색인 OfPage에서 제공하는 페이지에 정확히 있을 필요는 없습니다.왜냐하면 나는 당신에게 이 코드를 이 방법으로만 사용하는 것을 추천하기 때문입니다.
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{}
스크롤 보기 스크롤이 완료되고 페이지 수가 매우 선명할 때 호출됩니다.
이 코드를 사용하여 스크롤 보기를 페이징 가능으로 설정하는 것이 좋습니다.
[scrollView setPagingEnabled:YES];
그래서 마지막으로 그렇게 보일 것입니다.
-(void) methodWhereYouSetYourScrollView
{
//set scrollView
[scrollView setPagingEnabled:YES];
scrollView.delegate = self;
}
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
int indexOfPage = scrollView.contentOffset.x / scrollView.frame.size.width;
//your stuff with index
}
신속하게 저는 그것을 확장할 것입니다.
extension UIScrollView {
var currentPage:Int{
return Int((self.contentOffset.x+(0.5*self.frame.size.width))/self.frame.width)+1
}
}
그럼 그냥 전화해요.
scrollView.currentPage
위와 같으나 범주로
@interface UIScrollView (CurrentPage)
-(int) currentPage;
@end
@implementation UIScrollView (CurrentPage)
-(int) currentPage{
CGFloat pageWidth = self.frame.size.width;
return floor((self.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
}
@end
다른 방법:
extension MyViewController: UIScrollViewDelegate {
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
let width = scrollView.frame.width
let page = Int(round(scrollView.contentOffset.x/width))
print("CurrentPage:\(page)")
}
}
여기에 이미 좋은 답이 몇 개 있습니다.그러나 내용이 페이지에 정확하게 들어맞지 않는 시나리오의 경우 - 그리고 저와 같은 경우에는 결과를 사용하고자 합니다.UIPageControl그렇다면 그것을 사용하는 것이 필수적입니다.ceil기능.
예를 들어 4페이지 분량의 콘텐츠를 예로 들어 보겠습니다.
저는 이것을 저의 현재 실생활 사례를 바탕으로 할 것입니다.콘텐츠 크기 폭은 3140점입니다.제 컬렉션 뷰 프레임 크기를 기준으로 페이지 너비는 728입니다.
페이지 수는 다음과 같습니다.
3140 / 728 = 4.313
나의numberOfPages5명이 될 것입니다.중 4개는 4개의 4번째 페이지, 5번째 페이지를 입니다.0.313
지금이다,numberOfPages가 0, 4.5인 을 의미합니다. 0, 1, 2, 3, 4입니다.
를 하면 페이징을 할 때, 쪽으로스하마고지오향프페면하이징해을셋막프오와른이,▁when,하면징페이.scrollViewDidEndDecelerating X 오프셋을 제공합니다.
반올림 계산 적용:
2412 / 728 = 3.313 then rounded = 3
틀렸어요.사용자가 오프셋으로 보고 있는 페이지는 다음과 같아야 합니다.
Offset / Page User Is Viewing
0 0
728 1
1456 2
2184 3
2412 4
을 사용한 ceil:
private func pageForOffset(offset:CGFloat, pageWidth width:CGFloat) -> Int
{
let page = Int(ceil(offset / width))
NSLog("\(__FUNCTION__) offset \(offset) width \(width) page \(page) ")
return page
}
현재 오프셋을 페이지 크기로 나누기만 하면 됩니다.
CGFloat pageNum = (int)(scrollView.contentOffset.x / scrollView.frame.size.width);
Aoakenfo의 솔루션은 놀랍습니다. 이것은 당신의 코드를 기능 스크롤과 결합한 또 다른 솔루션입니다. ViewDidScroll 및 PageController
- (void)scrollViewDidScroll:(UIScrollView *)sender {
if (sender == self.scroll) {
int pageNum = (int)(self.scrPage.contentOffset.x / self.scrPage.frame.size.width);
self.pagecontroller.currentPage =pageNum;
}
}
신속을 위해 저는 그냥 이것을 사용할 것입니다.
let width = scrollView.frame.width
let page = round(scrollView.contentOffset.x/width)
간단히 말하면, 기본적으로 스크롤 뷰 x 위치를 사용하여 스크롤 뷰 폭으로 나눈 다음 반올림합니다.
xCode 7.x swift 2.x에서 다음을 수행할 수 있습니다.
//MARK: - ScrollView Extensions
// Get the current page number
extension UIScrollView {
var currentPage: Int {
return Int(round(self.contentOffset.x / self.bounds.size.width))
}
// If you have reversed offset (start from contentSize.width to 0)
var reverseCurrentPage: Int {
return Int(round((contentSize.width - self.contentOffset.x) / self.bounds.size.width))-1
}
}
우리 앱 몇 개에서 이걸 추출했어요
- (NSInteger)currentPage
{
if (0 == self.frame.size.width) {
NSLog(@"frame width == 0!");
return 0;
}
if (! self.currentPageValid) {
_currentPage = round(self.contentOffset.x / self.frame.size.width);
self.currentPageValid = YES;
}
return _currentPage;
}
UIPage Control을 사용하고 있습니까?만약 그렇다면, 이것은currentPage소유물.그렇지 않으면 스크롤 뷰 오프셋에서 페이지 인덱스를 계산해야 할 것 같습니다.
Swift 5.1+ UIScrollView 확장(반환 키워드 생략)
extension UIScrollView {
var currentPage: Int {
Int(round(self.contentOffset.x / self.frame.width))
}
}
사마린을 위한 C#에서 방법을 찾는 사람이 있다면.
public int CurrentIndex
{
get => (int)Math.Round(this.scrollView.ContentOffset.X / this.scrollView.Frame.Width);
set => this.scrollView.ScrollRectToVisible(new CGRect(new CGPoint(this.scrollView.Frame.Size.Width * value, 0), this.scrollView.Frame.Size), true);
}
이 getter 및 Setter는 지정된 페이지로 스크롤할 수 있는 현재 페이지도 제공해야 합니다.
언급URL : https://stackoverflow.com/questions/4132993/getting-the-current-page
'programing' 카테고리의 다른 글
| 옵션 Bool 값 확인 (0) | 2023.08.17 |
|---|---|
| IE8 및 JQuery의 트림() (0) | 2023.08.17 |
| 테이블 잠금 없이 거대한 MariaDB 프로덕션 데이터베이스에 인덱스 생성 (0) | 2023.08.17 |
| PL/SQL 개발자의 그리드 출력에서 numwidth를 설정하는 방법은 무엇입니까? (0) | 2023.08.17 |
| 쓰리텐 사용법안드로이드 프로젝트의 ABP (0) | 2023.08.17 |