1

たとえば、Tweetbot の iPhone アプリ。アプリを開いて新しいツイートが入ってくると、UIScrollView の一番上に追加されるだけで、現在表示されているツイートは更新されません。どうすれば同じ効果を得ることができますか? オリジン10,10から始まるUIScrollViewにUIViewが追加されたUIScrollViewがあるとします。

次に、いくつかのアイテムをダウンロードして、それを 10,10.. に配置したいので、基本的に、この古いアイテムを 10,10 にシフトする必要があります。そうする場合、そのシフト中にユーザーにはシフトが表示されますが、これは私が望む効果ではありません。Tweetbot のアプリでは何も変更されていないように見えますが、10,10 より上の領域を拡大し、そこに新しいものを追加しているだけです。

どうすればいいですか?

基本的に、UIScrollView に insertRowAtIndexPath を実装したかったのです。

4

2 に答える 2

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);
}
于 2012-07-17T02:47:09.520 に答える
0

アニメーションなしで を設定するcontentOffsetと、スクロール アニメーションは表示されません。したがって、新しいビューの高さが 200 ポイントの場合、新しいビューの原点を (10,10) に、古いビューの原点を (10,210) に設定しcontentOffset、スクロール ビューの原点を (10,210) に設定すると、意図した効果が得られるはずです。 . contentSizeまた、スクロール ビューに含まれるすべてのコンテンツに対して十分な大きさになるように、スクロール ビューを大きくする必要があります。

于 2012-07-17T02:29:59.980 に答える