3

我正在尝试滚动到在 webView 中查看的 PDF 的最后查看位置。卸载 PDF 时,会保存 webView 的 scrollView 的 y 偏移量。然后,当重新打开 PDF 时,我想跳到他们离开的地方。

当动画设置为 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

公司:{0, 5432}

但是 PDF 仍然显示首页

我在这里查看了类似问题的答案,但他们没有解决这个问题。

谢谢您的帮助 :)

4

1 回答 1

1

在组件完成 PDF 的呈现contentOffset之前,您不能触摸。UIWebView它之所以有效,是setContentOffset: animated:YES因为动画强制渲染。

如果contentOffset在渲染开始后设置为至少 0.3s(根据我的测试),则完全没有问题。

例如,如果您在您的文件中加载 PDF,viewDidLoadUIViewController可以performSelector:withObject:afterDelay:viewDidAppear:延迟contentOffset设置中使用。

要在设置之前隐藏 PDF contentOffset,您可以将其 alpha 设置为 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 回答