より大きなビュー内に表示されているビューがあり、常に同じ場所に留まります。ユーザー入力が提供されると、最初のビューの下に 2 番目のビューが表示されます。これをややスムーズなトランジションにしたいので、最初のビューのすぐ後ろに2番目のビューを配置し、交差点を使用してビューが重なるかどうかをチェックするタイマーを開始しました。ビューがオーバーラップしなくなり、タイマーが停止するまで、オーバーラップが再度チェックされます。
2 番目のビューが最初のビューの背後にあり、現在は下からスライドしているように遷移が見えるようにしたいと考えています。そのため、2 番目のビュー (progressBarView と呼ばれる)が完全に表示されている場合にその位置を正確に表す "imaginaryRect" を作成し、それを使用して imaginaryRect を下に移動するときに交差点を確認します。しかし、交差点の下の長方形(imaginaryRect から交差点の高さを差し引いたもの) を実際に 2 番目のビューを表示するものにし、それを newFrame と呼びます。
2 番目のビューがどのようにアニメーション化されるかを除いて、これはすべて完全に機能します。一番上のビューの下からスライドして見えるようにしたいのですが、これは、ビューが一番上のビューの下に表示され始めると、ユーザーは最初に 2 番目のビューの下部が表示され、さらに下にスライドすることを意味します。 d 中央部分が見え、最後に上部が下降し終わり、それらがすべて表示されます。実際に起こっていることは、ビューが表示され始めると、上から下に表示されるということです。最初に上部が表示され、次に中央、次に下部が表示されます。上から下にスライドさせているような印象はありません。実際には動いていないように見えますが、その上にあった何かを覆っていたものが滑り落ちているような印象を与えます。
私は一昨日からこれに取り組んでいますが、問題はフレームの起源に関係していると思います。しかし、それだけです。
これは私が使用しているコードです:
CGRect imaginaryRect = NSMakeRect(progressBarView.frame.origin.x,progressBarView.frame.origin.y, view.frame.size.width, view.frame.size.height);
CGRect rectIntersection = CGRectIntersection (view.frame,
imaginaryRect);
//if view and imaginary progress bar view frame intersect, the view is lowered
//the second condition prevents one drop too many at the end
if (!CGRectIsNull(rectIntersection) && (rectIntersection.size.height!=0)) {
CGRect offsetFrame = CGRectOffset (imaginaryRect, 0, -1);
imaginaryRect = offsetFrame;
//rectIntersection is recalculated after the offset, so it's height is subtracted for newFrame
rectIntersection = CGRectIntersection(view.frame, imaginaryRect);
//the rect below the area of intersection
CGRect newFrame = CGRectMake(imaginaryRect.origin.x, imaginaryRect.origin.y, view.frame.size.width, view.frame.size.height-rectIntersection.size.height);
//move the PBview to the new, slightly lowered frame (this is the frame that's located below the front view, but subtracts the intersection)
[progressBarView setFrame:newFrame];
助けてくれてありがとう!