私がやってしまったことですし、私にとっては、これまでのところ非常にうまく機能:
マイストーリーボードのセットアップ:

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

基本的に私は半分しかそのを持って、UIScrollView
のように同じ高さが、UIImageView
内部を持っていることが通常UIView
を制約しました高さ。画像がパスに沿って移動しているときに、ユーザーがそれらを元に戻そうとすると、接触はしばしば接触を受けていないので、UIScrollViews
境界の外にあるため、私はそれを行いました。
それほど一般的な設定にはなりません。
UIScrollView
とそのすべてのサブビューのclipsToBounds
を無効にすることを確認してください。
今、私はちょうどUIViewController
にUIScrollViews
デリゲートを割り当てられ、ここで
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
内のすべての画像を、独自のスクロールに基づいて循環経路上で常に翻訳するようになりました。
私がこの正確な同じ問題を何ヶ月も解決しようとしているので、これが本当に役に立つと願っています。
運が良かった!
私はhttp://stackoverflow.com/questions/17995681/animate-a-uiview-along-an-arcを試しましたか? –
ありがとうございます。以前はそのリンクを見る機会がありましたが、私はスクロールビューのオフセットに基づいて円を移動したいので、私の必要性を満たしませんでした。 – Xchord
あなたはこれに対する解決策を見つけましたか? – Florensvb