私はUITableViewに似たいくつかのアイテムを表示している、軸が垂直のUIStackViewを持っています。しかし、私はそれらをDispatchQueue.main.asyncAfterを使ってアニメーション化しています。このアプリは、古いデバイスを取り組む必要があるとして、少なくともシミュレータ上で(私は、これは問題にすべきとは思わない、いくつかの理由についてCABasicAnimationはUIStackViewでは信頼できませんか?
let anim = CABasicAnimation(keyPath: "transform.translation.x")
anim.duration = 0.2
anim.fromValue = UIScreen.main.bounds.size.width
anim.toValue = 0
anim.isRemovedOnCompletion = true
anim.fillMode = kCAFillModeRemoved
:ここ
は私がCABasicAnimationを作成するために使用していたコードです、またはiPhone 7+などの強力なデバイス)、アニメーションが必ずしも同じ場所に着くとは限りません。
時には、セルが飛び込み、左から約8ピクセル、時には約12、時には約20になることもあります。一貫しているようには見えません。しかし、私はtoValueが0であると思う、私は層にアニメーションを追加しなかった場合、それは通常どこに表示されるはずです。
isRemovedOnCompletionをtrueに設定し、fillModeを削除しようとしましたが、これはアニメーションを修正していないようです。
アニメーションが続くにつれて、セルが水平UIStackViewから作成され、そこに配置されたサブビューが非表示になる点が1つあります。私はUIView.animateWithDurationメソッドを使って隠れた値をfalseに設定し、サブビューをアニメーション化します。
私は、これが起こると、上記のセルが数ピクセル離れているのではなく、その位置にポップバックするためです。
アニメーションを作成した後にセルでsetNeedsDisplayを試してみましたが、verticalStackViewでも動作しませんでした。私は何が起こっているのか、なぜこれらのレイヤーが正しい位置にアニメーション化されないのか理解できません。誰のアイデアですか?
P.S.垂直スタックビューは、ViewControllerのinitメソッドですべて初期化されます。アニメーションは、viewDidAppearメソッドで発生します。 DispatchQueue.main.asyncAfterを追加してアニメーションをオフセットしてみましたが、super.viewDidAppear(アニメーション)の後に最初に試しましたが、どちらも同じ結果でした。
Xの位置を変換しようとするのではなく、おそらくより効果的にアニメーション化することになります。スタックビューはautolayoutを広く使用しており、このシステムの外で効果的に作業しています。 – Paulw11
UIViewがUIStackView内にあるUIViewの主要な値のストーリーボード内の定数を編集しようとしました。それはそれを好まない。 stackviewがそれを許さない場合、どのように位置の制約をアニメーション化するのですか?たぶん、プレースホルダーセルを作成する必要があります。コンテンツをアニメーション化しますか? – Kjell
はい、プレースホルダを追加し、それを修正しました。 – Kjell