問題タブ [contentoffset]
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 - UICollectionView / UITableViewでscrollViewのオフセットをアニメーション化すると、セルが途中で消えてしまいます
UITableViewに非常によく似たカスタムレイアウトのUICollectionViewがあります(垂直方向にスクロールします)。UICollectionViewは、同時に3つのセルのみを表示し、そのうちの1つが現在アクティブなセルです。
(ここでのアクティブセルは#2です。)セルの高さは約280ポイントであるため、アクティブセルのみが画面に完全に表示されます。ユーザーは、ビューを直接スクロールしてナビゲートするのではなく、アクティブなセルを水平方向にスワイプして次のセルに進みます。次に、いくつかの凝ったアニメーションを実行し、UICollectionViewをスクロールして、次のセルが「アクティブ」の位置になるようにします。これにより、そのセルがアクティブになり、古いセルが移動され、キュー内の次のセルが表示されます。
ここでの問題は、UICollectionViewのオフセットを設定することです。現在、UIViewアニメーションブロック(self.collectionView.contentOffset = targetOffset;
)に他の3つのアニメーションプロパティとともに設定しています。これはほとんどの場合うまく機能しますが、アニメーションが開始するとすぐに最初のセル(以前はアクティブだったセル、後者の場合は#2)が消えます。遅延間隔が完了する前でも実行されます。これは間違いなく理想的ではありません。
私はいくつかの解決策を考えましたが、最良の解決策を見つけることができません:
UICollectionViewのフレームを3つではなく5つのセルに収まるように不条理に拡大して、セルが画面外にある場合でもセルをメモリに保持するように強制します。私はこれを試しましたが、動作しますが、ひどく汚いハックのように聞こえます。
消えるセルのレンダリングされたコンテンツのスナップショットを取り、それをUIImageViewに配置し、セルが古いセルとまったく同じ位置になくなる直前に、UIImageViewをscrollViewのサブビューとして追加し、アニメーションが終了したら削除します。前のオプションよりも(少なくともメモリに関しては)厄介に聞こえますが、それでもちょっとハッキーです。私もこれを達成するための最良の方法を知りません、正しい方向に私を向けてください。
UIScrollViewに切り替えます
setContentOffset:animated:
。私たちは実際にこれを持っていて、セルの消失の問題を修正しましたが、これを他のUIViewアニメーションと並行して実行すると、明らかにメインスレッドの注意を奪い合うため、シングルコアデバイス(iPhone 3GS / 4)。また、アニメーションの長さやイージングを変更できないため、他のアニメーションと同期していないように感じます。UIViewブロックアニメーションと調和して機能させる方法を見つけることができれば、それでもオプションです。UICollectionViewに切り替えます
scrollToItemAtIndexPath:atScrollPosition:animated:
。これは試していませんが、大きな欠点があります。ターゲットのスクロール位置に必要な定数は3つだけです(少なくともこの場合に当てはまります) 。UICollectionViewScrollPositionTop
、、UICollectionViewScrollPositionCenteredVertically
およびUICollectionViewScrollPositionBottom
。アクティブセルはその高さを変えることができますが、常にウィンドウの上部から35ポイントである必要があり、これらのオプションでは、設計を実行するための十分な制御が提供されません。また、3.1と同じくらい問題になる可能性もあります。私が知らないスクロール位置のことを回避する方法があるかもしれないので、それでもオプションです、そしてそれはメインスレッドと同じ問題を持っていないかもしれません、それはありそうもないようです。
どんな助けでも大歓迎です。説明が必要かどうか尋ねてください。どうもありがとう!
objective-c - UIScrollView: より正確/正確な contentOffset 値?
のより正確なバージョンを取得する方法、または (できれば) の 1 次導関数をcontentOffset
推定/計算する方法があるかどうか疑問に思っていました。の変化率が非常に小さい場合にアクションを実行しようとしていますが、0.5f では十分な精度が得られません。contentOffset
contentOffset
UIScrollView
contentOffset
UIScrollView
どんな助けでも大歓迎です。
uiscrollview - UIScrollView のスクロール時にコンテンツ オフセットがリセットされる
ユーザーがテーブルビューをプルダウンして表示できるようにしたときに、テーブルのヘッダー ビューの一部を表示できるようにしたいと考えています。同様に、ユーザーがヘッダーをビューの外に押し出したときに非表示にしたいと考えています。
これを行うために、テーブルの上部を非表示にするコンテンツ インセットを設定しました。表示したい部分を非表示にするコンテンツオフセットも設定しました
問題は、ビューをスクロールすると、テーブルを押し上げても、コンテンツ オフセットがリセットされ、表示したい部分が表示されているように見えることです。
この問題scrollViewWillEndDragging:withVelocity:targetContentOffset:targetContentOffset
により、スクロールしている方向に対してコンテンツのオフセットをアニメーション化するために使用できなくなります。
ここに私のコードがあります(でviewDidAppear:
)
スクロール時に変更するのはコンテンツオフセットのプロパティですか、それともここで私が考慮していない何か他のことが起こっていますか?
いつもありがとう
objective-c - UIScrollView の位置の検出
iOS アプリケーションで UIScrollView をナビゲーション デバイスとして使用しようとしています。基本的に、ページングが有効な UIScrollView の位置に基づいて、アプリケーションが特定のコンテンツを読み込むようにしたいと考えています。ナビゲーションホイールのようなものです。
現在、2 ページ (2*320) のスクロールビューがあり、scrollViewDidEndDragging
デリゲート メソッドを使用しcontentoffset.x
て適切なコンテンツを読み込んでいます。私はそのようにスクロールビューの位置を決定しようとします:
私の問題は、contentoffset の操作方法を理解していないか、問題に対処するのに適していないことです。いずれにせよ、私は立ち往生しています。誰かが私が間違っていた場所を教えてくれたり、スクロールビューの位置を決定するためのより効率的な方法を教えてくれたりできますか?
私は愚かです、私は問題が何であるかを言及するのを忘れていました... 基本的に、スクロールビューの位置を追跡することはできません. 2 番目のページに移動すると、620 の制限を超えた場合 (右にバウンス) にのみ変更が登録されます。しかし、開始位置 (ページ 1) に戻ると、変更が登録されます。つまり、私の追跡は正確ではありません。
デリゲートと他のすべてが正常に機能しています。ログに記録します!
objective-c - 別のViewControllerからUIScrollViewの位置を設定する
contentOffset を次のように使用して、UIScrollView の位置を設定しようとしています。
このメソッドを閉じる前に別のView Controllerから呼び出すと、すべてがチェックアウトされます。引数を正しく渡し、メソッドが呼び出されます(NSLogで確認)が、スクロールビューが移動しません...
面白いのは、このメソッドが配置されているView Controllerからこのメソッドを呼び出すと、正常に機能することです。別のView Controllerから呼び出した場合にのみ、動作が停止します。
今後の参考のために、呼び出し方法を次に示します。
コンテンツ オフセットは、事前に設定した CGPoint です。ここでは問題ありません。その上、とにかく正しく渡されます。
uiscrollview - デフォルトで UICollectionView の UISearchBar をスクロールする
UICollectionView (実際には PSUICollectionView) を使用するプロジェクトに取り組んでおり、このコレクション ビューの上部に UISearchBar を追加しました。私が今したいことは、ユーザーがプルダウンするまでデフォルトでこの検索バーをスクロールすることです。この動作は UITableView で非常に簡単に実行できますが、UICollectionView の contentSize は viewDidAppear まで初期化されません!! したがって、contentOffset の Y を検索バーの高さに設定しても、viewDidAppear で行われない限り効果はありません (これは私が望んでいるものではありません)。誰かが UICollectionView で UISearchBar を使用し、デフォルトでスクロールしないようにする方法を見つけましたか?
ありがとう!-アミット
iphone - UITableViewcontentOffSetが正しく機能していません
で、のヘッダービューとしてviewWillAppear
追加しました。ビューが読み込まれると、contentOffSetofを使用して非表示になります。ユーザーがテーブルビューをプルダウンすると、検索バーが表示されます。UISearchBar
UITableView
UISearchbar
UINavigationBar
UITableView
ヘッダービューを追加した後、以下のコードを使用して非表示にします。
しかし、時にはcontentOffSet
ヘッダービューを隠していません。何が間違いなのか。
ios - contentOffset はログの値をスキップします
だから私は次のコードを持っています:
出力は次のとおりです。
私の質問は次のとおりです。なぜ「スキップ」するのですか (「actualPosition」にこれらの値がないのと同じように) 485-489、491-511、および 513-549? スクロールが速くなったとしても、すべての「位置」に対してactualPositionにこの値を記録/与えるべきではありませんか? float の場合と同じように機能するため、これは問題ではありません。actualPosition がスクロールされたすべての位置の値を受け取るようにするにはどうすればよいですか?
objective-c - 「コンテンツオフセットが...より大きい場合」アクションを実行する方法
私は何時間もどこでも絶対に見てきましたが、私に合った解決策を見つけることができません. 私がやろうとしているのは、uiscrollview 内のコンテンツの位置が特定の位置より上で別の位置より下にあるときに、アプリに何かをさせることだけです。それが理にかなっていることを願っています。これが私がうまくいくと思ったコードです:
どんな助けでも大歓迎です!
編集: contentOffset が最初の contentOffset と等しい場合に「if」ステートメントを作成すると、アクションが実行されることを忘れていた場合。contentOffset は、アプリがロードされたときに指定された値のままであるように見えます。アプリの前半で contentOffset を値に設定しましたが、それが何かに影響するかどうかはわかりません。