2010-07-15 8 views
2

가로 스크롤로 앱을 만들어 일련의 이미지를 가로로 스크롤 할 수있게하려고합니다. 저는 WWDC Session 104 비디오를 보았습니다. 흥미로운 앱을 만들었지 만, 그들은 매우 빠르게 기초를 훑어 보았습니다.iPhone 수평 스크롤

나는 UIScrollView를 사용하는 것을 이해하고 페이징을 사용해야한다. 그 후 그들은 scrollview의 하위 뷰로 뷰를 추가해야한다고 말하지만, 어떻게해야하는지 명확하지 않습니다. 또한 뷰에 이미지를 추가하는 방법이 명확하지 않습니다.

아마 당신이 말할 수 있듯이 나는 이것에 아주 새로운 어떤 도움을 주시면 감사하겠습니다.

답변

12

UIImageView을 조사하고 싶습니다. 특별히 이미지를 담는보기입니다.

당신이 당신의 이미지를 추가 할 때, 당신은 자신의 (아마도 각 UIImageView에 대한 initWithFrame: 사용)의 구형되도록 설정하려면 :

0,0
  • 에서 두 번째 이미지는 320입니다
    • 첫 번째 이미지가됩니다 0
    • 세번째

    즉 640,0 (등)에있을 각 이미지는 이전의 320 픽셀입니다.

    마지막 단계는 UIScrollView에 대해 contentSize을 설정하는 것입니다. 스크롤보기의 전체 크기를 나타내는 CGSize입니다.

    3 개의 이미지가있는 경우 이미지를 사용하여 (320 * 3) * 480으로 설정합니다.

    myScrollView.contentSize = CGSizeMake(320*3, 480); 
    

    많은 사람들이 스크롤보기를 초기화 할 때 표시하려는 이미지를 단계별로 실행하는 for 루프 또는 유사 항목이 있습니다.

    CGFloat scrollWidth = 0.f; 
    for (UIImage *someImage in someNSArrayWithImages) { 
        UIImageView *theView = [[UIImageView alloc] initWithFrame: 
         CGRectMake(scrollWidth, 0, 320.f, 480.f)]; 
        theView.image = someImage; 
        [myScrollView addSubview:theView]; 
        [theView release]; 
        scrollWidth += 320.f; 
    } 
    myScrollView.contentSize = CGSizeMake(scrollWidth, 480.f); 
    

    이 방법은 당신이 일을 줄거야 당신은 같은 시간에 당신을 위해 콘텐츠 크기를 얻을 수 있습니다 : 루프에 대한이 같은 식으로하는 경향이있다.

    사람들이 왼쪽/오른쪽으로 슬라이드 할 때 "지능적으로"스크롤보기가 나타나고 중지되도록하려면 myScrollView.pagingEnabled = YES을 수행 할 수 있습니다.

    희망을 얻는 데 도움이됩니다.

  • 1

    "무한한"이미지가 있다고 가정하면 거대한 UIScrollView에서 실행 시간 또는 그 이전에 모든 이미지를 넣을 수는 없습니다. (거기에 UIView의 크기에 제한이 있습니다)

    내가 해결 방법 : 전체 화면을 다루는 UIScrollView를 확인하십시오. 내용은 3 * 320 너비 및 480 높이의 UIView 여야하며 320px 왼쪽 및 320px 오른쪽으로 확장해야합니다.

    3 개의 UIImageView를 왼쪽, 가운데 및 오른쪽에 넣습니다. paging = YES로 설정하면 uiscrollview가 사용자가 작성한 3 "페이지"로 클립됩니다.

    은 클래스의있는 UIScrollView의 대리인이 있는지 확인하고

    -(void)scrollViewDidEndDragging:(UIScrollView*)sv willDecelerate:(BOOL)notFinished 
    -(void)scrollViewDidEndDecelerating:(UIScrollView*)sv 
    -(void)scrollViewDidEndScrollingAnimation:(UIScrollView*)sv 
    

    를 수신하고 페이징 경계를 타격의 적절한 전환을; 이미지를 이동하고 ContentOffset을 설정하여 센터 이미지를 다시 볼 수 있습니다.

    나는

    그런 다음 당신은 수신 거부 해제하고 페이징에 사용할 수 없습니다 것을 만드는, 여기 UIScrollView - (bounces = NO) seems to override (pagingEnabled = YES) 여기 http://www.iphonedevsdk.com/forum/iphone-sdk-development/935-paging-uiscrollview.html을 문서화, 버그에 명중 것입니다 ... 당신이 읽기 전용 다음이 먼저, 그리고 수 있도록 제안 동시. 따라서 수신 거부를 사용하고 UIScrollView를 서브 클래스 화하여 수신 거부를 방지하기 위해 setContentOffset을 무시하십시오. (수신 거부 기능을 사용하면 다소 특이한 사용자 환경을 만들 수 있습니다.)

    1

    Apple's PageControl sample code을 살펴보십시오. 따라하기 쉽고 쉽기 때문에 가로로 스 와이프 할 때 여러보기 컨트롤러가로드되는 프로젝트 설정의 요지가 있습니다.

    일단이 설정을 사용하면 자신의 콘텐츠 (귀하의 경우 이미지)를로드하는 것은보기 컨트롤러의 책임입니다. 페이징 등을하기 전에 먼저 이미지를로드하는 방법 (스레드 등)을 이해해야합니다.

    두 개의 독립적 인 작업으로 생각하십시오. 뷰 컨트롤은 이미지로드 및 표시를 담당합니다. 페이징이 포함 된 스크롤 뷰는 적절한 뷰 컨트롤러에게로드 할시기를 알려줍니다 (보기 컨트롤러가로드 된 후에는 컨트롤러가 무엇인지 신경 쓰지 않습니다).

    행운을 빈다!

    관련 문제