問題タブ [uikit-dynamics]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - CollectionView を使用した iOS7 メッセージ アプリ UIKitDynamics のレプリケート
UIKitDynamics を使用して弾力性のある collectionViewLayout を実装する方法について、非常に多くのチュートリアルや議論があることを私は知っています。
iOS7 Messages アプリで「メッセージ バブル」を複製するという正確なトピックに対処する WWDC 13 セッション ビデオさえあります。
セッション ビデオに従って、このチュートリアルを使用して独自の「跳ねるレイアウト」を作成しました。このチュートリアルでは、タイリング メカニズムの実装に関する詳細も説明されています。これにより、何千ものセルでもスムーズに動作することが保証されます。
ただし、結果は依然としてメッセージ アプリで確認できるものとは大きく異なります。私の目標は、メッセージ アプリとまったく同じ動作を再現することでした。
UIAttachmentBehavior
プロパティ (長さ、減衰、周波数) に いくつの異なる値を指定しても、バウンスを正しく行うことができません。
セッション ビデオでは、セルが実際の位置に戻らないため、長さの値を 0 より大きく設定すると問題が発生することが示されています。ただし、長さを ~0.5 に設定することで、メッセージ アプリが示す滑らかで高速な減速しか再現できませんでした。- collectionView が境界の端に達すると、Messages アプリの最後の数個のバブルに誇張されたバウンスが発生しますが、私の「チュートリアルの実装」はまったくバウンスしません。
開発者フォーラムで議論があります: Apple Dev Forums Discussion
セルごとに複数の UIAttachmentBehaviors を使用することを提案する人もいれば、UIView を適用すると言う人もいます - spring Animations は、この望ましい効果を与えることができます。Messages アプリが UIKitDynamics + UICollectionView をまったく使用しないという仮定さえあります。(私は、Apple がそのためにこの明白なテクニックを使用していないことを疑います)
私の質問: メッセージ バブル動作の正確な複製を正常に実装した人はいますか? このトピックに関する回答を得るために、他に何ができますか?
ios - UIDynamicAnimator を使用してダイナミクス変形を回避する方法
ビューの上部から四角い色のラベルをドロップしている単純なテトリスのようなアプリがあり、ウィンドウの下の境界線と衝突すると積み重なります。
重力と衝突をシミュレートするために iOS ダイナミクス フレームワークを使用しています。2 つの質問があります。
ブロックが下の境界線に衝突したときのバウンス効果を完全になくすにはどうすればよいですか? 衝突動作の弾力性を 0 に設定してみました (ドキュメントによると、これはバウンスがまったくないことを意味します) が、ブロックはまだ少しバウンスします。したがって、少なくともドキュメントのバグだと思います。誰かが他の回避策を試すことを提案する前に、誰かがこれを確認できますか?
私が試したもう 1 つのテクニックは、オブジェクトが衝突を開始したときに非常に高い抵抗を設定し、衝突が終了したときにそれを低い抵抗にリセットすることです。このアプローチの問題点は、すべてのブロックに一般的なこの動作により、下部で衝突が発生するたびに他の落下ブロックが影響を受ける (そして速度が低下する) ことです。
2 番目の質問は、アニメーション エンジンを停止して、積み上げている間にブロックを圧縮する方法についてです (完全に剛体ではない実世界の重力の影響をシミュレートします)。私のアプリでは、ブロックが整列していないことがはっきりとわかります。上のブロックの重さに押しつぶされます。
どうすればこの動作を回避できますか? 密度を 1 に、弾力性を 0 に設定しようとしましたが、うまくいきませんでした。
また、下部のいくつかのブロックの y 座標が 481 であることにも気付きました。これは、親ビューから押し出されたことを意味します。底が衝突境界と見なされている場合、これはどのように可能ですか?