ユーザーがズーム倍率をドキュメントに関連付けて、そのドキュメントを UIWebView 内に表示する際の出発点として使用できるようにしたいと考えています。ただし、これはwebViewDidFinishLoad:
レンダリングやレイアウトを含まず、メモリ内ロードの終了を示すだけのようです。問題を示すサンプル コードを次に示します。
- (void)viewDidLoad {
[super viewDidLoad];
UIWebView *webView = (UIWebView *)self.view;
webView.delegate = self;
webView.scalesPageToFit = YES;
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
NSString *urlString = [[NSBundle mainBundle] pathForResource:@"Doc" ofType:@"pdf"];
NSURL *file = [NSURL fileURLWithPath:urlString];
[(UIWebView *)self.view loadRequest:[NSURLRequest requestWithURL:file]];
}
- (void)webViewDidFinishLoad:(UIWebView *)webView {
if (!webView.isLoading) {
[webView.scrollView setZoomScale:1.5 animated:YES];
}
}
setZoomScale: への呼び出しは効果なしで実行されます (つまり、ファイルは 1.0 のズーム係数で表示されます)。これは明らかに、スクロール ビューが処理できる状態になる前に発生するためです。上記の最後の方法を次のように変更すると、すべてが期待どおりに機能します。
- (void)delayedZoomMethod {
[((UIWebView *)self.view).scrollView setZoomScale:1.5 animated:YES];
}
- (void)webViewDidFinishLoad:(UIWebView *)webView {
[self performSelector:@selector(delayedZoomMethod) withObject:nil afterDelay:1.0];
}
もちろん、これは悪い考えです。なぜなら、1.0 の遅延は恣意的であり、ほとんどの場合、おそらく長すぎ、未知の一連の条件下では短すぎる可能性が高いからです。
ドキュメントには、「Webビューのスクロール動作をカスタマイズしたい場合、アプリケーションはスクロールビューにアクセスできます。」と述べています。 Webビューまたはそのスクロールビューの通知またはプロパティを知っている人はいますか?その声明が真実になるのはいつですか?