2013-03-19 7 views
2

UIScrollView에 대한 간단한 몇 가지 질문을 이해하는 데 어려움을 겪고 있습니다.UIScrollView에 대한 몇 가지 질문

  1. 왜 우리는 UIScrollViewcontentSize 아닌 경계를 증가합니까? 실제로, 나는 경계와 contentSize가하는 무슨을 이해하지 않는다.

  2. pagingEnabled을 YES로 설정하면 scrollView가 스크롤을 중지 할 위치를 어떻게 알 수 있습니까?

  3. 페이지 간 간격을 내 UIScrollView에 추가하고 싶습니다.

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    NSArray *colors = [NSArray arrayWithObjects:[UIColor redColor], [UIColor greenColor], [UIColor blueColor], nil]; 

    #define kGutterWidth 20 

    UIScrollView *scrollView = self.scrollView; 
    CGRect scrollViewFrame = scrollView.frame; 
    scrollViewFrame.size.width += kGutterWidth; 
    scrollView.frame = scrollViewFrame; 

    CGSize scrollViewSize = scrollView.bounds.size; 

    for (int i = 0; i < colors.count; i++) { 
     CGRect frame = CGRectMake(scrollViewSize.width * i, 0, 
      scrollViewSize.width - kGutterWidth, scrollViewSize.height); 
     UIView *subview = [[UIView alloc] initWithFrame:frame]; 
     subview.backgroundColor = [colors objectAtIndex:i]; 
     [scrollView addSubview:subview]; 
     [subview release]; 
    } 

    scrollView.contentSize = CGSizeMake(
     colors.count * scrollViewSize.width, 
     scrollViewSize.height); 
} 

코드의 소스 : How to create a paging scrollView with space between views

이 코드 작품 (pagingEnabled = YES) 롭 mayoff가 쓴, 나는 인터넷에서 검색하고 다음 코드 발견 적절하게, 그러나 그것이 그것을 이해하지 않는 한 그것은 중요하지 않습니다.

  1. 나는 결국 페이지가 원래 크기로로드 할 것이라는 점을 알고있다, 그러나 나는 각 페이지가 kGutterWidth으로 제외되기 때문에이 일어날 않는 방법을 이해하지 않습니다.

  2. rob은 왜 scrollView의 프레임을 kGutterWidth로 증가 시켰습니까?

  3. 좋아요,이 질문은 바보 같은 소리가 들릴 수도 있지만 실제로 이해가 가지 않습니다. 코드에서 Rob은 scrollView이라는 새 scrollView 객체를 만들었습니다. 값은 self.scrollView 값과 같습니다. 글쎄, 나는 scrollView, 영향 self.scrollView, 다른 개체가 있기 때문에 어떻게 변경 이해할 수 없습니다. 그들의 메모리 주소는 다릅니다.

저는 오랜 시간 동안 이러한 질문을 이해하기 위해 애 쓰고 있습니다. 오늘은 여기에 쓰기로했습니다.

감사합니다.

답변

5

1 - 당신은 UViewbounds 속성에 대한 실제적인 설명을 확인할 수 있습니다 시스템을 자신의 좌표는 에서 뷰의 위치와 크기를 설명

경계 사각형을.

실제 contentSize :

The size of the content view. 

자체와 관련하여 UIView의 실제 크기에 관한 제 존재 (그 superView 관련하여 frame 인). 두 번째는 contentSize과 관련이 있습니다. 보다 큰 contentSize이 있으면 스크롤 기능이 제공됩니다. 문서에서

2-

:이 속성의 값이 YES이면

는 스크롤 뷰 스크롤 뷰의 경계 때 사용자가 스크롤의 배수로 멈춘다. 기본값은 NO입니다.

UIScrollView 대 너비 (contentSize)의 크기 (너비)를 기준으로 계산 된 것 같습니다. 예를 들어 320p 프레임의 640p contentSizeUIScrollView은 2 개의 "페이지"를 갖습니다. (640/320 = 2).

3- 간격은 UIView을 각 페이지가 실제 페이지보다 "안에"들어가게함으로써 생성됩니다.

CGRect frame = CGRectMake(scrollViewSize.width * i, 0, 
      scrollViewSize.width - kGutterWidth, scrollViewSize.height); 
그래서

다음 프레임 (0.0f,0.0f,320.0f,480.0f)(1280.0f,480.0f)contentSize이 줄 것과 UIScroll : =>(0.0f,0.0f,300.0f,480.0f)

2 항목의 프레임

첫번째 항목의 프레임을 어느 롭 여기에 무엇을 기본적으로 =>(320.0f,0.0f,300.0f,480.f)

세 번째 프레임 =>(640.0f,0.0f,300.0f,480.0f)

4 항목의 프레임 =>(960.0f,0.0f,300.0f,480.0f)


편집 1.0 :

나는 전혀 이해하지 않습니다. "각 페이지의 내부에있는보기 을 실제 페이지보다 작게 만드는 것"은 무엇을 의미합니까?

그럼 예제를 보자, 내가 사용 : 그래서 당신은 현재 당신은 기본적으로 우리가 페이지를 호출 할 수 있습니다, 당신에게 4 개 별개의 장소를 제공하는 UIScrollView 나누어 3 회이며, 무엇을 실제로 4 "페이지"를 가지고있다. 각 "페이지"안에는 각 페이지 사이에 "공간"의 의미를 부여하기 위해 UIView을 실제 페이지보다 작게 넣을 것입니다.

편집 2.0 :

어쩌면 더 시각적 인 무언가가 당신을 도울 것입니다 :

enter image description here

편집 3.0 :

당신이 페이징의 작동 방식을 이해한다면 그것은 쉽게 ... 320 ~ + 20 픽셀 = 340px를 이는 iPhone 화면 크기의 320px 이상입니다. UIScrollView에 각 UIView이 추가되어 340-20 = 320px이므로 크기가 340px 인 "페이지"를 갖게됩니다. 그래서 340 * 3 (숫자는 UIViews) 결국 1020px를 얻습니다. 기본적으로 3 UIViews + 3 Spaces

+0

1. 경계에 자체 좌표계가 있고 scrollView와 관련하여 왜 경계가 너비가 아닌가? contentSize의 폭과 같은가? –

+0

2. 계산은 프레임의 너비 또는 경계의 너비를 기반으로합니까? (또는 그것들은 똑같습니까?) –

+0

'contentSize'는 안에있는 것과 관련이 있습니다. 반면에 'width'는 여러분이 볼 수있는 것과 관련이 있습니다 ... 한 쌍의 쌍안경을 넣으십시오. 여러분이 보는 것은'view'입니다. , 세계는'contentSize'입니다. 쌍안경을 돌릴 수있는 능력은 스크롤링입니다 ... 나의 예를 이해할 수 있습니까? – Peres

0
  1. 경계는보기의 실제 컨테이너입니다. contentSize는 "가시 크기"입니다. 예 : 100px 높이의 표는 12 개의 셀을 포함하고 20px는 셀을 포함합니다. 총 크기는 ≈ 240 픽셀이며 contentSize이지만 경계 높이는 100 픽셀입니다.