2012-03-01 8 views
2

AndroidのUI左右のジェスチャータイプのナビゲーションを複製しようとしています。これはAndroid Marketplaceでも使用されますが、iPhone版のGoogle+でも使用されます。iPhoneのメニューでAndroid ViewPagerタイプの機能を複製する

ここは、私が模倣しようとしているGoogle+の実際のYouTubeリンクです。 http://www.youtube.com/watch?v=RYW9yxhhhPU&t=0m25s

上記のビデオからわかるように、メインの表示領域の上に小さなスクロール領域があります。小さなスクロール領域は、メインページがスクロールされるときに、テキスト「Incoming」、「Circles」、「Nearby」およびそれらの間を移動します。

私が試みた(失敗した)のは、2つのUIScrollViewを作成しています。 1つはメインエリア用、もう1つは小さなエリア用です。私はより小さいUIScrollViewをメインスクロールビューのcontentOffset.xの0.5倍で左または右にシフトするように設定しました。

見た目は多少似ていますが、小さなスクロールビューのテキストラベルを左、中央、右の位置に正確に並べることは非常に困難です。

これが正しい方法であるかどうかはわかりませんが、それ以外の方法がある場合は、聞きたいと思います。

本当にありがとうございます。ありがとうございました!

答えて

3

のサブクラスになります。私はそれが主に働いている。スクロールするときにアニメーションをマイナスします。私はこれについてgithubのプロジェクトを開始しました。私が行くにつれて私はそれに加えていくつもりですが、その間に良いジャンプポイントになるはずです。デモはここにあります。https://github.com/btate/BTViewPager

0

ベスト・アプローチは、ページングUIScrollViewを作成することです。次に、ナビゲーションとメインコンテンツの両方のUIScrollを1つのUIView /ページに配置します。スワイプすると、ページが固定されます。ナビゲーションは少し動いているようですが、私はGoogleがこのアプローチを使用したと仮定します。

ここでは、ページングスクロールビューに必要なものを正確に示すためのサンプルコードのチュートリアルを示します。

http://www.iosdevnotes.com/2011/03/uiscrollview-paging/

ナビゲーションラベルを達成するために、私はUIViewのサブクラスを、右のメインスクロールビューの上にビューを追加すると思います。次に、ビューにラベルの再編成を指示します。おそらく ` - (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView

私はすぐに私が何を意味するかを実証する何かがあります。これは私が同様のプロジェクトのためにこれをしなければならないのUIView

- (void)addLablesForItems:(NSArray *)items 
{ 

    for (NSString *s in items) 
    { 
     UILabel *l = [[UILabel alloc] initWithFrame:CGRectZero]; 
     l.text = s; 
     [self addSubview:l]; 
    } 

    [self layoutSubviews]; 
} 

- (void)layoutSubviews 
{ 

    for (UIView *l in [self subviews]) 
    { 
     if ([l isKindOfClass:[UILabel class]]) 
     { 
      int index = [[self subviews] indexOfObject:l]; 
      if (index == 0) 
      { 
       l.frame = CGRectMake(0, 0, 20, 20); 
      } 
      else 
      { 
       UILabel *previousL = (UILabel *)[[self subviews] objectAtIndex:index -1]; 

       l.frame = CGRectMake(previousL.frame.origin.x+previousL.frame.size.width, 0, 20, 20); 
      } 
     } 
    } 
}  

- (void)shiftLabels:(int)direction 
{ 
    //0 is left 
    //1 is right  
    for (UIView *l in [self subviews]) 
    { 
     if ([l isKindOfClass:[UILabel class]]) 
     { 
      if (direction == 0) 
      { 
       int newOrigin = l.frame.origin.x - l.frame.size.width; 
       if (newOrigin < 0) 
       { 
        newOrigin = self.frame.size.width - l.frame.size.width; 
       } 
       [UIView animateWithDuration:.5 animations:^{ 

        l.frame = CGRectMake(newOrigin, 0, 20, 20); 
       }]; 
      } 
      if (direction == 1) 
      { 
       int newOrigin = l.frame.origin.x + l.frame.size.width; 
       if (newOrigin < 0) 
       { 
        newOrigin = self.frame.origin.x; 
       } 

       [UIView animateWithDuration:.5 animations:^{ 
        l.frame = CGRectMake(newOrigin, 0, 20, 20);      
       }]; 
      } 
     } 
    } 
} 

`

+0

私はそれがページングスクロールビューより複雑だと信じています。テキストラベルに気が付いた場合は、長さに関係なく、正確な左/中央/右の位置に移動します。私はページングのスクロールビューを行う方法を知っています。私が理解する限り、どのように同じ効果を達成できるかわかりません。 – kurisukun

+0

申し訳ありませんが、追加するだけで、私のコードはすでに説明した方法で作成されていますが、同じスライディングテキスト効果は得られません。 – kurisukun

+0

ただ私の答えを編集しました。それが役に立ったら教えてください。 –

関連する問題