2016-08-03 34 views
1

をスクロールしながら、私は成長をアニメートすることができたか、次のコードを使用して、以下の図に示す丸:移動ビューLTInfiniteScrollViewを使用

- (void)updateView:(UIView *)view withProgress:(CGFloat)progress scrollDirection:(ScrollDirection)direction { 
    CGFloat size = 50; 
    CGPoint center = view.center; 
    view.center = center; 
    size = size * (1.4 - 0.5 * (fabs(progress))); 
    view.frame = CGRectMake(0, 0, size, size); 
    view.layer.cornerRadius = size/2; 
    view.center = center; 
} 

Current Implementation

何私は下の画像のようにスクロールしながらアークの移動効果を達成したいです。円弧の中を円で移動したい。円弧の中を動いているように見えるように、Yの新しい値を計算する方法や数式はありますか?ここで

What I want to implement.

+0

私はhttp://stackoverflow.com/questions/17995681/animate-a-uiview-along-an-arcを試しましたか? –

+0

ありがとうございます。以前はそのリンクを見る機会がありましたが、私はスクロールビューのオフセットに基づいて円を移動したいので、私の必要性を満たしませんでした。 – Xchord

+0

あなたはこれに対する解決策を見つけましたか? – Florensvb

答えて

1

私がやってしまったことですし、私にとっては、これまでのところ非常にうまく機能:

マイストーリーボードのセットアップ:

Storyboard Setup

あなたがここで見ることができ、何がAでありますコンテンツビューにUIViewという通常のUIScrollViewが表示されます。コンテンツビューの内側には垂直方向のUIStackViewがあり、画像を均等に配置します。画像を追加または削除するだけで、何かを再制約したり、すべての画像にアウトレットを付けたりする必要がないので、スタックを持つこともできます。その代わりに、スタックビューのみを制限し、ビューコントローラへのコンセントを作成し、arrangedSubviewsプロパティを使用して画像を反復処理することができます。

ご覧のとおり、私は実際にUIImageView 'Profile_One'を別のUIViewに入れています。それは必要ではないが、私は、次の絵を使って説明します:

Screenshot

基本的に私は半分しかそのを持って、UIScrollViewのように同じ高さが、UIImageView内部を持っていることが通常UIViewを制約しました高さ。画像がパスに沿って移動しているときに、ユーザーがそれらを元に戻そうとすると、接触はしばしば接触を受けていないので、UIScrollViews境界の外にあるため、私はそれを行いました。

それほど一般的な設定にはなりません。

UIScrollViewとそのすべてのサブビューのclipsToBoundsを無効にすることを確認してください。

今、私はちょうどUIViewControllerUIScrollViewsデリゲートを割り当てられ、ここで

func scrollViewDidScroll(_ scrollView: UIScrollView) { 
    arrangeImageStack() 
} 

は私arrangeImageStackメソッドが何をするかで上書き:

func arrangeImageStack() { 
    for arrangedSubview in imageStack.arrangedSubviews { 
     // Subview is the UIImageViw 
     let subview = arrangedSubview.subviews[0] 
     // X has to be translated from the image's superview to the view controller's view 
     let x = subview.superview?.convert(subview.center, to: view).x 
     // Then move the center along the new Y value 
     subview.center = view.convert(CGPoint(x: x!, y: getYOnCircumference(forX: x!) - scrollView.contentOffset.y), to: subview.superview) 
    } 
} 

そして、ここでは魔法getYOnCircumference(forX: CGFloat)です:

func getYOnCircumference(forX x : CGFloat) -> CGFloat { 
    let converted_x = x - view.frame.width/2 
    let radius = profileImageView.frame.width 
    let result = sqrt(abs(pow(radius, 2) - pow(converted_x, 2))) 
    return result 
} 

Do not be co converted_xによってnfusedされていますが、これは、画像を整列させたいパスがサークル内にあり、円滑な丸みを得るためにView Controllerのビューよりはるかに大きいためです。数式に差し込むX値が、あなたのCIRCLE- NOT YOUR VIEWの座標系と一致していることを確認する必要があります。次に、その円の半径を取得し、数式にすべて接続します。これは、の「座標の解決」のセクションに表示されています。

UIScrollViewは、UIStackView内のすべての画像を、独自のスクロールに基づいて循環経路上で常に翻訳するようになりました。

私がこの正確な同じ問題を何ヶ月も解決しようとしているので、これが本当に役に立つと願っています。

運が良かった!

関連する問題