2012-07-17 2 views
0

예를 들어 Tweetbot의 iPhone 앱에서. 앱을 열고 새로운 트윗이 올 경우 UIScrollView 상단에 추가되고 현재 표시된 트윗은 새로 고쳐지지 않습니다. 어떻게하면 같은 효과를 얻을 수 있습니까? UIView가 원점 10,10에서 시작하는 UIScrollView에 추가 된 UIScrollView가 있다고 가정 해 보겠습니다.UIView를 UIScrollView 맨 위에 추가

다음 몇 가지 항목을 다운로드하고 10,10에 넣으 려합니다. 기본적으로 10시 10 분에이 오래된 항목을 이동해야합니다. 내가 그렇게하면 이동하는 사용자의 시선이 바뀌는 것을 볼 것이고, 그것은 내가 원하는 결과가 아닐 것입니다. Tweetbot의 응용 프로그램에서 아무것도 옮겨 다니는 것처럼 보이지 않는 곳에서는 10,10 위에있는 영역을 확장하고 거기에 새로운 요소를 추가하는 것입니다.

어떻게하면됩니까?

기본적으로 나는 UIScrollView에 insertRowAtIndexPath를 구현하려고했습니다.

답변

0

UIScrollView의 맨 위에 이미있는 내용을 이동하지 않고 (현재 오프셋과 비교하여) 내용을 추가하는 방법을 묻습니다.

이것이 맞는 질문 인 경우 올바른 대답은 제안한대로 추가 및 아래로 이동 한 다음 추가 된 콘텐츠와 동일한 높이로 스크롤하여 이전 콘텐츠가 움직이지 않는다는 환상을 제공하는 것입니다.

- (void)insertRowAtTop { 

    // not showing insert atIndexPath because I don't know how you have your subviews indexed 
    // inserting at the top, we can just shift everything down. you can extend this idea to 
    // the middle but it requires that you can translate from rows to y-offsets to views 

    // shift everything down 
    for (UIView *view in self.scrollView.subviews) { 
     if ([view isKindOfClass:[MyScrollViewRow self]]) { 
      MyScrollViewRow *row = (MyScrollViewRow *)view;   // all this jazz so we don't pick up the scroll thumbs 
      row.frame = CGRectOffset(row.frame, 0.0, kROW_HEIGHT); // this is a lot easier if row height is constant 
     } 
    } 
    MyScrollViewRow *newRow = [[MyScrollViewRow alloc] initWithFrame:CGRectMake(0.0,0.0,320.0,kROW_HEIGHT)]; 
    // init newRow 
    [self.scrollView addSubview:newRow]; 

    // now for your question. scroll everything so the user perceives that the existing rows remained still 
    CGPoint currentOffset = self.scrollView.contentOffset 
    self.scrollView.contentOffset = CGPointMake(currentOffset.x, currentOffset.y + kROW_HEIGHT); 
} 
0

애니메이션을 사용하지 않고 contentOffset을 설정하면 눈에 보이는 스크롤 애니메이션이 표시되지 않습니다. 따라서 새 뷰의 높이가 200 포인트라면 새 뷰의 원점을 (10,10)으로 설정하고 이전 뷰는 (10,210)으로 설정하고 스크롤 뷰의 contentOffset을 (10,210)으로 설정하면 효과를 얻을 수 있습니다. 의도한다. 또한 스크롤 뷰의 contentSize을 포함시켜 모든 콘텐츠에 대해 충분히 커야합니다.

관련 문제