setContentOffset:动画:如果动画 = NO,则不会做任何事情
Posted
技术标签:
【中文标题】setContentOffset:动画:如果动画 = NO,则不会做任何事情【英文标题】:setContentOffset: animated: wont do anything if animated = NO 【发布时间】:2012-07-30 22:48:13 【问题描述】:我正在尝试滚动到在 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
CO:0, 5432
但 PDF 仍显示首页
我在这里查看了类似问题的答案,但他们没有解决这个问题。
感谢您的帮助:)
【问题讨论】:
你试过打电话给setNeedsDisplay
吗?只是一个想法。或者您将偏移设置为比所需的动画少一个像素,然后将一个像素的移动动画到所需的位置。那它有用吗?
【参考方案1】:
在UIWebView
组件完成PDF 的呈现之前,您不能触摸contentOffset
。它适用于setContentOffset: animated:YES
,因为动画会强制渲染。
如果在渲染开始后将contentOffset
设置为至少0.3s(根据我的测试),完全没有问题。
例如,如果您在UIViewController
的viewDidLoad
中加载PDF,您可以在viewDidAppear:
中使用performSelector:withObject:afterDelay:
来延迟contentOffset
设置。
要在设置contentOffset
之前隐藏 PDF,您可以将其 alpha 设置为 0.01(不要将其设置为 0,除非渲染不会开始)并在设置 contentOffset
后将其设置回 1。
@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
【讨论】:
以上是关于setContentOffset:动画:如果动画 = NO,则不会做任何事情的主要内容,如果未能解决你的问题,请参考以下文章
UITableView setContentOffset:动画不正确
UIScrollView setContentOffset:动画:奇怪的行为
UITableView, setContentOffset 动画:NO 不会在 iPad 上滚动