3

webView で表示されている PDF の最後に表示された位置までスクロールしようとしています。PDF がアンロードされると、webView の scrollView の y オフセットが保存されます。次に、PDF を再度開いたときに、中断したところにジャンプしたいと思います。

以下のコードは、animated が YES に設定されている場合は正常に動作しますが、NO に設定されている場合は何も起こりません

    float scrollPos = [[settingsData objectForKey:kSettingsScrollPosition]floatValue];
    NSLog(@"scrolling to %f",scrollPos);
    [webView.scrollView setContentOffset:CGPointMake(0, scrollPos) animated:NO];
    NSLog(@"ContentOffset:%@",NSStringFromCGPoint(webView.scrollView.contentOffset));

これは以下を出力します:

5432.000000 までスクロール

CO:{0, 5432}

ただし、PDFはまだトップページを表示しています

ここで同様の質問に対する回答を見ましたが、この問題は解決しません。

助けてくれてありがとう :)

4

1 に答える 1

1

コンポーネントがPDFのレンダリングを完了するcontentOffset前にタッチすることはできません。アニメーションがレンダリングを強制するため、UIWebViewこれは機能します。setContentOffset: animated:YES

contentOffsetレンダリング開始後に(私のテストから)少なくとも0.3秒に設定した場合、まったく問題はありません。

たとえば、のPDFをロードする場合は、viewDidLoadUIViewController使用performSelector:withObject:afterDelay:して設定viewDidAppear:を遅らせることができcontentOffsetます。

を設定する前にPDFを非表示にするにcontentOffsetは、アルファを0.01に設定し(レンダリングが開始されない場合を除いて0に設定しないでください)、設定後に1に戻すことができますcontentOffset

@interface ViewController : UIViewController
{
    UIWebView *w;
}

@property (nonatomic, retain) IBOutlet UIWebView *w;

@end

@implementation ViewController

@synthesize w;

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSURL *u = [[NSBundle mainBundle] URLForResource:@"test" withExtension:@"pdf"];
    [w loadRequest:[NSURLRequest requestWithURL:u]];
    w.alpha = 0.01f;
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    [self performSelector:@selector(adjust) withObject:nil afterDelay:0.5f];
}

- (void)adjust
{
    float scrollPos = 800;
    NSLog(@"scrolling to %f",scrollPos);
    [w.scrollView setContentOffset:CGPointMake(0, scrollPos) animated:NO];
    NSLog(@"ContentOffset:%@", NSStringFromCGPoint(w.scrollView.contentOffset));
    w.alpha = 1;
}

@end
于 2012-09-06T16:55:13.187 に答える