リンクがタップされたときに、右の境界線から画面に UIWebView をアニメーション化しようとしています。これを行うために、2 つの UIView を使用しています。1 つは onScreenWebView と呼ばれ、もう 1 つは offScreenWebView と呼ばれます。アイデアは、offscreenWebView を画面上で右からアニメーション化し、onScreenWebView を画面外で左からアニメーション化できるということです。次に、ビューを交換します (画面上のビューが onScreenWebView になり、その逆も同様です) が、アニメーションに問題があります。初めてうまく機能することに注意する必要があります。その後、まったくうまくいきません。
ビューはそのように整列されています
__________ __________
| | | |
| on | | off |
| screen | | screen |
|________| |________|
アニメーションコードは次のとおりです。
offScreenWebView.hidden = true;
offScreenWebView.frame = self.frame;
[offScreenWebView offSetX:self.bounds.size.width + kOffsetPadding]; // move offscreen to the right
[self logWebRects:@"begin"];
offScreenWebView.hidden = false;
[self bringSubviewToFront:offScreenWebView];
[UIView animateWithDuration:0.5f delay:0.0f options:UIViewAnimationCurveEaseInOut animations:^{
[self logWebRects:@"during 1"];
offScreenWebView.frame = self.frame;
onScreenWebView.frame = CGRectMake(-(self.bounds.size.width + kOffsetPadding), 0, onScreenWebView.bounds.size.width, onScreenWebView.bounds.size.height);
[self logWebRects:@"during 2"];
}completion:^(BOOL finished) {
[self logWebRects:@"finished b4 swap"];
[self swapWebViews];
[self logWebRects:@"finished -- done"];
}];
これが私のlogWebRectsメソッドの出力です(各ビューの起源のみ)
Navigation Type :: Link Clicked
Rect of self frame :: {{0, 0}, {320, 460}}
99 -- Point of offscreen origin begin :: {335, 0}
0 -- Point of onscreen origin begin :: {0, 0}
99 -- Point of offscreen origin during 1 :: {335, 0}
0 -- Point of onscreen origin during 1 :: {0, 0}
99 -- Point of offscreen origin during 2 :: {0, 0}
0 -- Point of onscreen origin during 2 :: {-335, 0}
Navigation Type :: Other
99 -- Point of offscreen origin finished b4 swap :: {0, 0}
0 -- Point of onscreen origin finished b4 swap :: {-335, 0}
0 -- Point of offscreen origin finished -- done :: {-335, 0}
99 -- Point of onscreen origin finished -- done :: {0, 0}
Navigation Type :: Link Clicked
Rect of self frame :: {{0, 0}, {320, 460}}
0 -- Point of offscreen origin begin :: {335, 0}
99 -- Point of onscreen origin begin :: {0, 0}
0 -- Point of offscreen origin during 1 :: {335, 0}
99 -- Point of onscreen origin during 1 :: {0, 0}
0 -- Point of offscreen origin during 2 :: {0, 0}
99 -- Point of onscreen origin during 2 :: {-335, 0}
Navigation Type :: Other
0 -- Point of offscreen origin finished b4 swap :: {335, 0}
99 -- Point of onscreen origin finished b4 swap :: {0, 0}
99 -- Point of offscreen origin finished -- done :: {0, 0}
0 -- Point of onscreen origin finished -- done :: {335, 0}
これらのログは、最初の実行からのものです。続いて二回戦も。なんらかの理由で、完了ブロックの直前でアニメーション ブロックが各 Web ビューのフレームをリセットしていることに気付くでしょう。
Web ビューを従来の一時変数スワップと交換することに注意してください。また、それらは兄弟ビューです。